0

这里我又遇到了一个 JSF 问题,这次更多的是关于 Richfaces(4.2.1 final,JSF 2)。我有一个 eytended DataTable 并想添加新项目。有Journey-objects 列表,每个属性都有 getter 和 setter。该表创建良好(列表中已经有一些项目)。现在我点击“添加新项目”按钮:

<a4j:commandButton ajax="true" value="Neue Fahrt hinzufügen" 
   actionListener="'{editorBean.prepareCreateJourney}" render="createJourneyPopupForm"  
   oncomplete="#{rich:component('createJourneyPopup')}.show()" />

editorBean 是SessionScoped,该方法被正确调用并创建一个新的Journey被调用对象currentJourney。出现一个弹出窗口,应该允许我插入一些输入:

<rich:popupPanel id="createJourneyPopup" modal="true">
    <h:panelGrid id="createJourneyPopupForm" columns="3">
        <h:outputLabel for="currentId" value="ID" />
        <h:inputText id="currentId"
            value="#{editorBean.currentJourney.journeyNumber}" />
        <rich:message for="currentId" />
        [...and more...]
    </h:panelGrid>

    <a4j:commandButton value="Save"
      execute="currentId currentTrainType operator">
        <f:ajax event="click" listener="#{editorBean.doCreateJourney}"
            render=":vmsEditorForm:resultTable" />
        <rich:componentControl target="createJourneyPopup" operation="hide" />
    </a4j:commandButton>
    <a4j:commandButton value="Abbrechen"
        onclick="#{rich:component('createJourneyPopup')}.hide();" />
</rich:popupPanel>

当我单击按钮时,该方法doCreateJourney被调用,但currentJourney为空。它是Journey创建后的默认对象。没有调用 setter,对输入字段进行提示。

我检查了两次名称,所有需要的对象都有 getter 和 setter。我试图改变范围,但没有效果。对象是相同的,在我创建的 prepare 方法Journey(id=151)和 save 方法中它仍然是Journey(id=151).

这里发生了什么?制作一些对话框来创建和编辑数据对象并不难。感谢您的聆听和帮助!

4

1 回答 1

1

您需要将输入和命令按钮都包装在一个表单中,以便正确提交数据。

<rich:popupPanel id="createJourneyPopup" modal="true">
    <h:form>
        ... the content of your popupPanel
    </h:form>
</rich:popupPanel>

问候,

于 2012-05-08T18:00:14.020 回答