【问题标题】:How to bind table row to Edit-button in jsf?如何将表格行绑定到jsf中的编辑按钮?
【发布时间】:2009-12-11 16:16:58
【问题描述】:

这是微不足道的,但不幸的是我不了解 JSF 中“幕后”的一些过程。所以,我也对相关文章的链接感兴趣。

问题:我有一个用户对象列表。我将这个列表表示为一个数据表。

<h:dataTable var="user" value="#{userService.allUsers}">
    <h:column>
        <f:facet name="header">
            <h:outputText value="Login"/>
        </f:facet>
        <h:outputText value="#{user.login}"/>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:outputText value="Birthdate"/>
        </f:facet>
        <h:outputText value="#{user.birthDate}"/>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:outputText value="Name"/>
        </f:facet>
        <h:outputText value="#{user.name}"/>
    </h:column>
    <h:column>
        <!--This form with button is not a real code, just my suggestion how these things should be done-->
        <h:form>
            <h:commandButton action="openEditForm" value="Edit"/>
        </h:form>
    </h:column>
</h:dataTable>

现在我想将命令按钮“编辑”添加到每个表格行。单击此按钮应打开一些带有可编辑字段的表单,我们可以在其中更改当前值。

<!--It's not a real code, just my suggestion how these things should be done-->
<h:form>
    <h:inputText value="#{user.login}"/>
    <h:inputText value="#{user.birthDate}"/>
    <h:inputText value="#{user.name}"/>
    <h:commandButton action="saveEdits" value="Save"/>
</h:form>

所以,我有两个问题:

  1. 如何将“编辑”按钮绑定到每一行(即绑定到用户对象)?
  2. 如何获取编辑形式的用户对象(第二段代码)?

【问题讨论】:

    标签: java data-binding jsf


    【解决方案1】:
    <h:commandLink id="editlink" value="#{msg.edit}" action="myEditPageNavRule">
        <f:setPropertyActionListener value="#{user}"
            target="#{userBean.user}" />
     </a4j:commandLink>
    

    #{user} 是您的 dataTable 变量。根据您的 userBean 的范围,您将在打开编辑页面时获得适当的数据。 (它肯定会在会话范围内工作,如果您的 navigationRule 没有“重定向”,我认为您将在请求范围内拥有它。

    上面的代码只是将当前的User对象设置为target属性。

    【讨论】:

      【解决方案2】:
      1. 只需通过action="#{user.edit}" 或者更好(更常见的方法,因为业务逻辑不属于模型对象)action="#{userService.edit}" 然后在edit 方法中通过&lt;f:setPropertyActionListener&gt; 在JSF 页面中访问User 对象或UIData#getRowData() 在操作方法中。无论如何,您只需要确保UIData 组件在后续请求中保留完全相同的数据模型即可。

        可以在此处找到示例:Using datatables

      2. 如果您将其声明为托管 bean,则它已经在作用域中可用。如果您想从另一个托管 bean 中引用它,请使用托管属性注入。

        可在此处找到示例:Communication in JSF

      【讨论】:

        猜你喜欢
        • 2022-12-22
        • 2021-04-23
        • 1970-01-01
        • 1970-01-01
        • 2012-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多