1

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

我有这个 inputText 字段,用户在其中键入文本,并且此文本保存在我的 bean 中:

<h:inputText value="#{searchBean.param}"/>

然后是这个按钮,当点击它时,它会执行搜索算法,然后将用户重定向到结果页面,如下所示:

<h:commandButton value="Botao" action="#{searchBean.execute}"/>

执行方法:

public String execute() {
      levenshtein(this.param);
      return "results";
}

这会将用户转发到 ..../results.xhtml,我需要这个链接是这样的:

.../results.xhtml?equation="无论用户打算搜索什么"&pagenumber="当前页码"

当我单击此页面中的链接时,我被重定向到我的站点之外,例如维基百科,然后当我单击浏览器上的后退按钮时,我需要能够恢复我搜索的内容和我的页面曾是。

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

4

2 回答 2

2

你想要一个 GET 表单。这很容易与<f:viewParam>.

看法:

<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);
}

// ...

注意:这将结果显示在同一页面中。另请注意,如果要添加分页链接/按钮,它们应该是普通的 GET 链接/按钮,而不是 POST(命令)链接/按钮。

也可以看看:

于 2013-02-26T11:45:41.487 回答
0

你想要GET 参数。Web 应用程序为了读取目的而检索数据的常规方法是使用 GET 参数。不幸的是,JSF 并不容易支持这一点。JSF2 有视图参数,而 JSF 有一个可行的等效 hack。devzone 上有一篇关于这个主题的长文:http: //java.dzone.com/articles/bookmarkability-jsf-2

于 2013-02-25T22:41:56.893 回答