【问题标题】:Primefaces dataTable only adding a single rowPrimefaces dataTable 仅添加单行
【发布时间】:2012-06-29 00:36:52
【问题描述】:

我一直在翻阅档案以寻找可能有帮助的答案,但似乎没有什么真正适用的。

我在 jsf 中有一个包含嵌套数据表的页面,其中包含来自支持 bean 的列表。该页面似乎没有任何问题地保存数据,但是当我尝试使用 p:collector Primefaces 对象添加我的任一数据表时,我的数据表只显示一行。我总是在两个列表中添加一个空对象。

列表中包含的对象是实现 Serializable 的自定义对象。

我的 backing bean 是 ConversationScoped,backing bean 中的数据是在对话开始时实例化的。

这是我的主页:

<ui:composition template="/templates/pageLayout.xhtml">

    <ui:define name="pageContent">

        <h:form id="genericWorkflowMainForm" enctype="multipart/form-data">

            <p:panel id="actionList">
                <div align="right">
                    <p:commandButton id="addActionButton" value="Add Action" update="actionTable" 
                                     action="#{createGenericWorkflowBean.addAction}" ajax="false">
                        <p:collector id="addActionCollector" value="#{createGenericWorkflowBean.actionRow}" 
                                     addTo="#{createGenericWorkflowBean.genericWorkflowData.actionGroup.actionCompletionList}"/>
                    </p:commandButton>
                </div>
                <h:dataTable id="actionTable" var="actions"
                             value="#{createGenericWorkflowBean.genericWorkflowData.actionGroup.actionCompletionList}">
                    <h:column>
                        <h:outputLabel value="Action  " /> 
                        <h:inputTextarea id="actionText" value="#{actions.actionRecord.actionText}" />
                        <br/>
                        <p:panel id ="actioneePanel">
                            <div align="right">
                                <p:commandButton id="addApproverButton" value="Add Approver" onclick="addApprover.show()"/>
                            </div>
                            <h:dataTable value="#{actions.actionRecord.actionees}" id="actioneeListValues" var="actioneeRecord">
                                <h:column>

                                    <h:outputText id="actioneeLabel" value="Actionee  " />
                                    <h:outputText id="actionee" value="#{actioneeRecord.user.user.name}" />

                                    <h:outputText id="actioneeCommentlabel" value="Comments  " rendered="#{actioneeRecord.user.display}"/>
                                    <h:inputTextarea id ="actioneeComment" value="#{actioneeRecord.userComment}" rendered="#{actioneeRecord.user.display}"/>

                                    <br/>
                                    <p:commandLink id="removeActionee" value="Remove" update="actioneeListValues" rendered="#{!actioneeRecord.user.display}">
                                        <p:collector value="#{actioneeRecord}" removeFrom="#{actions.actionRecord.actionees}"/>
                                    </p:commandLink>

                                </h:column>

                            </h:dataTable>

                            <p:dialog id="addApprover" header="Add Approver" widgetVar="addApprover" modal="false" closable="false"
                                      resizable="false" width="250">
                                <div>
                                    <p:autoComplete id="autoCompleteApprover" value="#{createGenericWorkflowBean.newApprover}"
                                                    /**//>
                                    <br/>
                                    <p:commandButton id="addNewApprover" title="Add Approver" value="Add"
                                                     update="actioneeListValues" onclick="addApprover.hide()" ajax="false"
                                                     action="#{createGenericWorkflowBean.addApprover()}">
                                        <p:collector value="#{createGenericWorkflowBean.newApprover}" 
                                                     addTo="#{actions.actionRecord.actionees}"/>

                                    </p:commandButton>

                                </div>
                            </p:dialog>
                        </p:panel>
                    </h:column>
                </h:dataTable>
            </p:panel>

        </h:form>
    </ui:define>
</ui:composition>

以下是我的支持 bean 中与 p:collector 添加和删除列表部分相关的部分。

@Named
@ConversationScoped
public class CreateGenericWorkflowBean extends WorkflowBean {

    @Inject
    Conversation conversation;

    private Actionee newApprover;

    private ActionCompletionRecord actionRow = new ActionCompletionRecord();

    private Actionee actioneeRow = new Actionee();

    public GenericWorkflowData getGenericWorkflowData() {
        return (GenericWorkflowData) getData();
    }

    public void addApprover() {

        setNewApprover(new Actionee());

    }

    public void addAction() {
        actionRow = new ActionCompletionRecord();
    }

}

我还在学习 JSF 和 Primefaces,所以我不知道我是否做过一些永远不会奏效的事情。

任何帮助将不胜感激。

马特·泰瑟姆

【问题讨论】:

  • 代码太多了。请在尽可能小但完整的单个 XHTML 页面和单个支持 bean 中隔离问题。例如,&lt;ui:define name="windowTitle"&gt; 标记和&lt;p:dataTable&gt;style="border:none" 属性是否绝对必要才能重现完全相同的问题?不?只是省略它。这同样适用于所有其他不必要的标记、属性、属性等。提供尽可能少的代码,其中包含的代码,这对于我们自己重现问题是绝对必要的,只需复制粘贴并运行代码即可。
  • 删除了所有的谷壳。抱歉,我在这里发布问题还是个新手。

标签: jakarta-ee jsf-2 primefaces


【解决方案1】:

实体类具有@override 方法,这些方法是在通过创建新实体向导创建新实体时生成的。从实体中删除所有覆盖的方法并保存。就这样。现在它将起作用。

【讨论】:

  • 在发布多个问题的复制和粘贴样板/逐字答案时要小心,这些往往会被社区标记为“垃圾邮件”。如果您这样做,则通常意味着问题是重复的,因此请标记它们。
猜你喜欢
  • 2014-03-19
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2016-10-19
  • 2015-01-27
  • 2013-10-03
  • 2016-10-02
  • 1970-01-01
相关资源
最近更新 更多