如果el表达式为真,如何从jsf facelet重定向?
我有一个jsf facelet,它显示搜索过程的摘要。 现在我想重定向到一个细节页面,如果搜索引擎只找到一个元素。我不想在bean中实现这个重定向,因为我想从java代码中获得关于这个重定向的“知识” 所以我想写一些这样的东西:如果el表达式为真,如何从jsf facelet重定向?,jsf,java-ee-6,el,Jsf,Java Ee 6,El,我有一个jsf facelet,它显示搜索过程的摘要。 现在我想重定向到一个细节页面,如果搜索引擎只找到一个元素。我不想在bean中实现这个重定向,因为我想从java代码中获得关于这个重定向的“知识” 所以我想写一些这样的东西: 有什么解决办法或想法吗 我知道,JSF2.2中有页面操作,但我使用的是JEE6,还有JSF2.0可用。 顺便说一句,我目前正在使用MyFaces、Primefaces和Richfaces 问候。我认为最干净的方法是在bean中生成操作。 无论如何,我建议您模拟一次点
有什么解决办法或想法吗
我知道,JSF2.2中有页面操作,但我使用的是JEE6,还有JSF2.0可用。
顺便说一句,我目前正在使用MyFaces、Primefaces和Richfaces
问候。我认为最干净的方法是在bean中生成操作。 无论如何,我建议您模拟一次点击,以防您的搜索计数在javascript中等于1 您需要一个包含计数的隐藏输入:
<h:inputHidden id="count" value="#{searchResult.count}" />
您应该在控制器中执行此操作,而不是在视图中 要获得搜索结果,首先需要通过搜索表单调用操作方法,对吗?就在那里做重定向工作。通过在操作结果的查询字符串中指定
facesdirect=true
,可以告诉JSF发送重定向
public String search() {
results = service.find(query);
if (results.size() == 1) {
return "details?faces-redirect=true&id=" + results.get(0).getTechnicalId();
}
else {
return "results";
}
}
或者,如果是由
处理的GET请求,则执行以下操作:
public void onPreRenderViewListener() {
results = service.find(query);
if (results.size() == 1) {
FacesContext.getCurrentInstance().getExternalContext().redirect("details.jsf?id=" + results.get(0).getTechnicalId());
}
}
public String search() {
results = service.find(query);
if (results.size() == 1) {
return "details?faces-redirect=true&id=" + results.get(0).getTechnicalId();
}
else {
return "results";
}
}
public void onPreRenderViewListener() {
results = service.find(query);
if (results.size() == 1) {
FacesContext.getCurrentInstance().getExternalContext().redirect("details.jsf?id=" + results.get(0).getTechnicalId());
}
}