【问题标题】:How to set bean property value in jsf page?如何在jsf页面中设置bean属性值?
【发布时间】:2010-11-08 20:34:09
【问题描述】:

我有 Facelet 组件,并且我有支持它的 bean。当我将我的组件包含到某个页面时,我将 bean 从页面传递到我的组件:

<ui:include src="./WEB-INF/templates/myTemplate.xhtml">
                    <ui:param name="pageBean" value="#{thisPageBean}" />
</ui:include>

我的组件也有支持 bean,我尝试将值从调用页面 bean 传递给我的:

<c:set target="#{componentBean}" property="field" value="#{pageBean.field}" />

但是这种方法行不通?有什么方法可以将值从一个 bean 传递到另一个?

我正在尝试创建复杂的自定义组件,它必须对传递给它的东西进行一些验证和其他操作?也许我走错路了?

【问题讨论】:

    标签: jsf facelets


    【解决方案1】:

    您可以在 JSF 2.0 中使用参数调用 bean 方法 因此,您可以尝试将 setter 方法放在这样的注释中:

    <!-- #{componentBean.setField(pageBean.field)} -->
    

    所以当页面加载时,setter 方法会被触发。

    【讨论】:

    • 为什么?有更好的解决方案
    【解决方案2】:

    这是我的一个 facelets 文件中的一些代码。如您所见,作为参数传递的bean的值,即:

    <ui:param name="bean" value="#{thisPageBean}" />
    

    并且可以使用 [dto] 表示法访问 bean 的属性 dto。

    <h:panelGroup>
        <h:selectOneMenu id="titleMenu" value="#{bean[dto].title}">
            <f:selectItems value="#{suburbsMBean.titles}" />
        </h:selectOneMenu>
        <h:message for="titleMenu" styleClass="error" />
    </h:panelGroup>
    

    【讨论】:

      【解决方案3】:

      您可以将 bean 作为组件的属性传递(我假设当您说“组件”时您使用的是ui:component)。

      对于一个组件:

      <ui:component binding="#{componentBean.myComponent}">
        <f:attribute name="foo" value="#{pageBean.field}" />
        <h:outputText value="#{componentBean.something}" />
      </ui:component>
      

      您可以使用以下方法获得支持 bean:

      private Object field;
      private UIComponent component;
      
      public void setMyComponent(UIComponent c) { component = c; }
      public UIComponent getMyComponent() { return component; }
      
      private void lookupFields() {
        field = component.getAttributes().get("foo");
      }
      
      public String getSomething() {
        if (field == null) {
          lookupFields();
        }
        return "" + field;
      }
      

      不是很优雅,但我对 Facelets 的机制并不是很熟悉,这是我想到的第一件事。请注意,保存视图时属性可能会保留 - 我不记得在属性映射上设置的内容。

      【讨论】:

      • 感谢它对我有用,但我找到了其他方法来做我想做的事。
      【解决方案4】:

      通常您将值分配给一些输入控件,例如:

      <h:inputText value='#{pageBean.field}'/>
      

      这意味着获取和设置someField 属性的值。 请详细说明在您的情况下应该确定#{pageBean.field} 的值。

      【讨论】:

      • 这个问题的一个很好的简单直接答案!
      猜你喜欢
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多