我有一个jsf facelet,它显示搜索过程的摘要。 现在我想重定向到详细信息页面,如果搜索引擎只找到一个元素。我不想在我的bean中实现这个重定向,因为我希望从我的java代码中获得关于这个重定向的“知识”。
所以我想写这样的东西:
<ui:redirect if="#{searchResult.count eq 1}" target="details.jsf">
<f:param name="id" value="#{searchResult.firstResult.technicalId}" />
</ui:redirect>
任何解决方案或想法?
我知道,JSF 2.2中有页面操作,但我使用的是JEE6,并且有JSF 2.0可用。 顺便说一句。我目前正在使用MyFaces,Primefaces和Richfaces。
问候。
答案 0 :(得分:1)
你应该在控制器中完成这项工作,而不是在视图中。
要获得搜索结果,首先需要通过搜索表单调用操作方法,对吧?只需在那里进行重定向工作。您可以通过在操作结果的查询字符串中指定faces-redirect=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";
}
}
或者,如果它是由<f:event type="preRenderView">
处理的GET请求,则执行以下操作:
public void onPreRenderViewListener() {
results = service.find(query);
if (results.size() == 1) {
FacesContext.getCurrentInstance().getExternalContext().redirect("details.jsf?id=" + results.get(0).getTechnicalId());
}
}
答案 1 :(得分:0)
我想说最干净的方法是在bean中生成动作。 无论如何,我建议你模拟一次点击,万一你的搜索计数是jq等于1。
您需要隐藏包含计数的输入:
<h:inputHidden id="count" value="#{searchResult.count}" />
和一个触发重定向的隐藏按钮:
<h:commandButton id="redirectButton" action="details.jsf" style="display: none;" />
然后当您触发搜索时,您更新输入计数并且您可以检查不完整 如果count的值为1,那么你可以单击commandButton。
如果您使用Jquery,它将类似于
if($("#count").val()==1){
$("#redirectButton").click();
}