JSF2.0:自定义组件的变量列表

时间:2010-06-03 17:22:54

标签: custom-component jsf-2

是否有任何方法可以将JSF2.0与变量组件列表结合使用?例如,假设我列出了我想编辑的人。它们在页面上显示为组件PersonEditor列表,允许更改人员数据。每个编辑器都与单个Person元素相关联。为了实现这一点,我需要执行以下步骤:

初次请求时:

  1. 获取人员列表
  2. 为每个人创建PersonEditor并将其与Person对象关联。
  3. 填写编辑的数据。
  4. 关于用户操作:

    1. 当用户更改值并按“保存”时,数据将由支持bean处理。
    2. 我可以使用人员列表中的数据填充编辑器,也可以将其绑定到支持bean,但不能同时将其绑定,所以我被卡住了。

      我试过了 people.xhtml

      <ui:render value="#{bean.people}" var="person">
        <example:personEditor person="#{person}"/>
      </ui:render>
      

      其中personEditor.xhtml:
      a)与person对象正确关联,但没有与backing bean的连接

      <h:form>
        <h:outputText value="#{cc.attr.person.name}"/>
        <h:commandButton name="Save" actionListener="editorBean.save">
          <f:ajax execute="@form" render="@form"/>
        </h:commandButton>
      </h:form>
      

      b)与person对象没有任何关联,但是有支持bean的连接 - 没有办法将该人传递给支持bean

      <h:form>
        <h:outputText value="#{editorBean.name}"/>
        <h:commandButton name="Save" actionListener="editorBean.save">
          <f:ajax execute="@form" render="@form"/>
        </h:commandButton>
      </h:form>
      

      如果我将每个编辑器放在单独的页面上,我可以将person id作为url参数传递(使用f:param或f:attribute)并相应地初始化它。 有没有解决这个问题的方法?

1 个答案:

答案 0 :(得分:1)

嗯,想知道为什么到目前为止没有人回答这个问题......看看这个:

http://balusc.blogspot.com/2006/06/communication-in-jsf.html

所以你的代码看起来像这样:

<h:form>
  <h:outputText value="#{cc.attr.person.name}"/>
  <h:commandButton name="Save" actionListener="#{editorBean.save}">
    <f:ajax execute="@form" render="@form"/>
    <f:setPropertyActionListener target="#{editorBean.editedPersonId}" value="#{cc.attr.person.id}" />
  </h:commandButton>
</h:form>

并且在调用editorBean.save时,该属性将包含编辑者的id(或者您可以传递person对象本身)。