【问题标题】:how to transfer parameter from managedbean to a jsf page如何将参数从 managedbean 传输到 jsf 页面
【发布时间】:2013-05-13 09:40:41
【问题描述】:

我想将参数从 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的作用域是request。我该怎么做才能解决这个问题?谢谢。

【问题讨论】:

  • 使用 EL 嵌入的flash 对象。

标签: jsf facelets


【解决方案1】:

你也可以试试viewParam

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

它基本上做了以下事情:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果您的 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} />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-24
        • 2014-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        • 2013-05-05
        相关资源
        最近更新 更多