0

我想将参数从 jsf 页面传输到另一个 jsf 页面。像这样:

一个.xhtml

<h:form>
    <h:commandLink class="navi" value="press"
               action="#{Bean.action}">
        <f:param name="id" value="5555" />
    </h:commandLink>
</h:form>

Bean.java

public String action() {
    HttpServletRequest request = (HttpServletRequest) FacesContext
            .getCurrentInstance().getExternalContext().getRequest();
    String param = request.getParameter("id");
    return "b?id=" + param;
}

b.xhtml

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

通过以前的方式,我将 id 从 a.xhtml 传输到 b.xhtml,但我不想因为这一行而将“...b.xhtml?id=5555”之类的参数暴露在外面:

return "b?id=" + param;

ManagedBean 的范围是请求。我该怎么做才能解决这个问题?谢谢。

4

3 回答 3

0

如果您使用的是 JSF 2 或 EL 2.2,您可以将其作为参数传递给方法

<h:commandLink class="navi" value="press" action="#{Bean.action(5555)}" />
于 2013-05-18T09:20:43.943 回答
0

你也可以试试viewParam

<f:metadata>
    <f:viewParam name="id" value="#{bean.id}" />
</f:metadata>

它基本上做了以下工作:

  • 通过名称id获取请求参数值。
  • 如有必要,对其进行转换和验证(您可以使用 required、validator 和 converter 属性并将 a 和嵌套在其中,就像 with 一样)
  • 如果转换和验证成功,则将其设置为 #{bean.id} 表示的 bean 属性

您可以在结果链接上传递 id(例如,b.xhtml?id=1)并在任何托管 Bean 上检索它。

于 2013-05-19T05:27:36.540 回答
-2

如果您的 bean 是会话范围的,这很容易。

Bean.java

private String param;

public String action() {
    HttpServletRequest request = (HttpServletRequest) FacesContext
            .getCurrentInstance().getExternalContext().getRequest();
    param = request.getParameter("id");
    return "b?id=" + param;
}

public String getParam() {
    return param;
}

xhtml

<h:inputText value=#{bean.param} />
于 2013-05-18T09:06:39.023 回答