1

我的 .xhtml 文件中有以下代码

<h:form id="registration3Form">
<h:panelGroup id="terms_outer_panel">
   <h:commandLink styleClass="item-7" 
                    action="#{registerBusinessWizardController.addCourse}" 
                    value="#{msgBundle['registerThirdPage.panel.addSchedule']}">
   </h:commandLink>
   <ui:repeat value="#{registerBusinessWizardController.courses}" var="course">      
                    <h:panelGroup id="terms_inner_panel">
                        <div class="term">

                            <h:inputText id="price" styleClass="item-2" value="#{course.price}" />

                            <h:inputText  id="dateFrom" styleClass="date" value="#{course.date}" >
                                <f:convertDateTime  pattern="yy-MM-dd" type="date" dateStyle="long"/>
                            </h:inputText>

                            <h:inputTextarea value="#{course.additionalInfo}"/>

                            <p class="more">
                                <h:commandLink 
                                    value="#{msgBundle['registerThirdPage.panel.deleteSchedule']}" 
                                    actionListener="#{registerBusinessWizardController.removeCourse}">
                                    <f:ajax render=":registration3Form:terms_outer_panel" execute="terms_inner_panel"/>
                                </h:commandLink>

                            </p>
                        </div>
                    </h:panelGroup>
        </ui:repeat>
    //some other stuff
</h:panelGroup>
</h:form>

当页面被渲染时。并且用户单击 addSchedule 链接我希望 ui repeat 将添加新的 div class="term" 空值绑定到输入,因为:

public void addCourse(){
    Course course = new Course();
    courses.add(course);
}

我正在将带有 null 价格附加信息和日期的新课程对象添加到 ui:repeat 使用的列表中。

相反,我得到了新的

<div class="term"> 

部分与从先前条目复制的值。

当我从列表中删除元素时(在 managedBean 中,列表中的正确对象被删除)我看到刚刚删除的对象中的数据:/

有人遇到过这种问题吗?你有什么建议吗?

4

1 回答 1

4

这似乎是另一个<ui:repeat>错误。Mojarra 的<ui:repeat>问题太多了。第一步是通过将组件替换为完全有价值的UIData组件(例如<h:dataTable>. 如果它有效,那么它绝对是一个错误<ui:repeat>,否则它只是你自己代码中的一个错误(基于我没有看到任何给出的代码,但是我假设你的 bean 是@ViewScoped)。

如果确实是<ui:repeat>自己造成的,那么第一步通常是升级到最新的 Mojarra 版本。目前对于 Servlet 2.5 容器是2.0.6,对于 Servlet 3.0 容器是 2.1.4。如果那不能解决问题,那么您应该考虑用具有不同且更好的实现的MyFaces<ui:repeat>替换 Mojarra 。如果由于某种原因这不是一个选项,那么您应该考虑查看具有UIData不呈现任何标记的基于组件的 3rd 方组件库,例如Tomahawk 的 <t:dataList>.

于 2011-12-12T12:28:23.720 回答