如何将参数从managedbean传输到jsf页面

时间:2013-05-18 08:40:32

标签: jsf facelets

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

a.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的范围是请求。我该怎么做才能解决这个问题?感谢。

3 个答案:

答案 0 :(得分:0)

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

<h:commandLink class="navi" value="press" action="#{Bean.action(5555)}" />

答案 1 :(得分:0)

您也可以尝试 viewParam

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

它基本上做了以下几点:

  • 按名称ID获取请求参数值。
  • 如有必要,转换并验证它(您可以使用必需的,验证器和转换器属性,并像在其中一样嵌套a)
  • 如果转换和验证成功,则将其设置为#{bean.id}
  • 表示的bean属性

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

答案 2 :(得分:-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} />