JSF ui:repeat和f:ajax在重新渲染后为h:inputText提供了错误的值

时间:2010-06-14 06:10:44

标签: ajax jsf jsf-2

我有一个问题列表,我可以使用ui:repeat显示它们,但是在单击Edit按钮后,重新呈现的inputText会被给出错误的question.id。出于某种原因,如果在第一个项目上单击“编辑”,则分配的inputText值是列表中第二个项目的值,即使其他输出(h:inputText元素除外)是正确的。

   <h:form id="questionnaireForm">

        <ui:repeat value="#{ProjectManager.currentProject.preQuestions}" var="question" varStatus="current"
                   id="preQuestionsRepeat">
            <div>
                <ui:fragment rendered="#{!question.editing}">
                    <f:ajax render="@form">
                        <p>#{question.id} #{question.questionText}</p>
                        <h:inputText value="#{question.id}"/>
                        <h:commandLink styleClass="link"
                                       action="#{question.setEditing}"
                                       value="Edit">
                        </h:commandLink>
                    </f:ajax>
                </ui:fragment>
            </div>
            <div>
                <ui:fragment rendered="#{question.editing}">
                    <f:ajax render="@form">
                        <p>#{question.id} #{question.questionText}</p>
                        <h:inputText value="#{question.id}"/>
                    </f:ajax>
                </ui:fragment>
            </div>
        </ui:repeat>

    </h:form>

显然我真的不想编辑id。我只想要正确的问题。我的inputText中显示了一些内容: - )

也许我没有正确使用?根据我到目前为止的阅读情况,这似乎很好。

非常感谢您的协助。

1 个答案:

答案 0 :(得分:1)

您是否正确覆盖了equals()和hashCode()?这些方法用于从您选择的列表中提取值。它会拉出与equals()运算符匹配的第一个。