Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果el表达式为真,如何从jsf facelet重定向?_Jsf_Java Ee 6_El - Fatal编程技术网

如果el表达式为真,如何从jsf facelet重定向?

如果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中生成操作。 无论如何,我建议您模拟一次点

我有一个jsf facelet,它显示搜索过程的摘要。 现在我想重定向到一个细节页面,如果搜索引擎只找到一个元素。我不想在bean中实现这个重定向,因为我想从java代码中获得关于这个重定向的“知识”

所以我想写一些这样的东西:


有什么解决办法或想法吗

我知道,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());
    }
}