Jsf 将inputText值作为url中的参数发送到下一页,并最终恢复

Jsf 将inputText值作为url中的参数发送到下一页,并最终恢复,jsf,Jsf,我发现了很多类似的问题,但没有一个解决方案适合我 我有一个inputText字段,用户在其中键入文本,该文本保存在我的bean中: <h:inputText value="#{searchBean.param}"/> 这将用户转发到..../results.xhtml,我需要这样的链接: <h:commandButton value="Botao" action="#{searchBean.execute}"/> …/results.xhtml?equation=“无

我发现了很多类似的问题,但没有一个解决方案适合我

我有一个inputText字段,用户在其中键入文本,该文本保存在我的bean中:

<h:inputText value="#{searchBean.param}"/>
这将用户转发到..../results.xhtml,我需要这样的链接:

<h:commandButton value="Botao" action="#{searchBean.execute}"/>
…/results.xhtml?equation=“无论用户想要搜索什么”&pagenumber=“当前页码”

当我点击这个页面上的链接时,我会被重定向到我的网站之外,比如说维基百科,然后当我点击浏览器上的后退按钮时,我需要能够恢复我搜索的内容和我所在的页面


我花了相当长的时间试图找出如何做到这一点,但每次尝试都失败了,请帮助我,谢谢。

你想要的。web应用程序为读取目的检索数据的正常方法是使用GET参数。不幸的是,JSF不容易支持这一点。JSF2有视图参数,JSF有一个可操作的等价hack。devzone上有一篇关于这个主题的长篇文章:

您想要一个GET表单。这与
结合起来很容易

视图:


...
查询
...
...
豆子:

私有字符串查询;
私人名单结果;
@EJB
私人搜索服务;
public void execute(){
结果=service.search(查询);
}
// ...
注意:这将在同一页面中显示结果。另外请注意,如果要添加分页链接/按钮,它们应该是普通的GET链接/按钮,而不是POST(命令)链接/按钮

另见:

类似,但来自BalusC(JSF专家):。在我看来,他更简洁地介绍了所有这些信息。事实上,fire得到了,一些组件只在POST上开火。。。使用时,参数不会更新,因为它是在操作之前生成的。。。但是必须有一种方法来恢复或将参数添加到bean内的url中。。。我只是不知道该怎么做当用户离开页面,然后点击浏览器,对象就消失了,对吗?因此,我想当用户单击下一页时,我必须从url读取当前页面和搜索的查询,但我还必须检查对象是否为null,这样我就可以确定用户正在缓存页面上执行操作。如何实现这一点?那么您根本没有测试启动示例?在做出错误的假设之前,请这样做。对不起,我想你误解了我。我不是说你的例子不起作用,或者是不够的。我只是想得到你的确认,是的,这是我需要做的事情应该发生的事情,或者不,这不太有效。再次抱歉。我在注入时遇到“com.sun.faces.mgbean.ManagedBeanCreationException”错误。请查看堆栈跟踪中异常的根本原因,了解异常的根本原因。
public String execute() {
      levenshtein(this.param);
      return "results";
}
<f:metadata>
    <f:viewParam id="query" name="query" value="#{searchBean.query}" />
    <f:event type="preRenderView" listener="#{searchBean.execute}" />
</f:metadata>
...
<form>
    <label for="query">Query</label>
    <input type="text" name="query" value="#{param.query}" />
    <input type="submit" value="Search" />
    <h:message for="query" />
</form>
...
<h:dataTable value="#{searchBean.results}" var="result" rendered="#{not empty searchBean.results}">
     ...
</h:dataTable>
private String query;
private List<Result> results;

@EJB
private SearchService service;

public void execute() {
    results = service.search(query);
}

// ...