这很琐碎,但不幸的是,我不了解JSF“幕后”的某些流程。因此,我也对相关文章的链接感兴趣。

问题:我有一个用户对象列表。我将此列表表示为dataTable。

<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>


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

<!--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>


所以,我有两个问题:


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

最佳答案

只需使用action="#{user.edit}"或可能更好(由于业务逻辑不属于模型对象,这可能是更常见的方法)action="#{userService.edit}",然后在edit方法中通过User在JSF页面或<f:setPropertyActionListener>对象>行动方法。无论如何,您只需要确保UIData#getRowData()组件在后续请求中保留完全相同的数据模型。
可以在此处找到示例:Using datatables

如果您将其声明为托管Bean,则它在范围中已经可用。如果要从另一个托管bean引用它,请使用托管属性注入。
示例可以在这里找到:Communication in JSF

关于java - 如何将表行绑定(bind)到jsf中的``编辑''按钮?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1889124/

10-14 09:39