Ui:repeat -从列表中添加/删除元素不能正常工作



我的.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);
}

我在ui:repeat使用的列表中添加了新的Course对象,其价格为null, addalinfo和日期为null。

得到new

<div class="term"> 

部分从上一个条目复制的值。

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

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

这似乎是另一个<ui:repeat>错误。Mojarra的<ui:repeat>有太多的问题。第一步是通过将其替换为完全有价值的UIData组件(如<h:dataTable>)来排除可疑组件。如果它工作,那么它绝对是<ui:repeat>中的一个bug,否则它只是您自己的代码中的一个bug(基于到目前为止我没有看到任何代码,我假设您的bean是@ViewScoped)。

如果它确实是由<ui:repeat>本身引起的,那么第一步通常是升级到最新的Mojarra版本。目前Servlet 2.5容器是2.0.6,Servlet 3.0容器是2.1.4。如果这不能解决问题,那么你应该看看用MyFaces取代Mojarra,它有一个不同的和更好的<ui:repeat>实现。如果由于某些原因无法使用,那么您应该考虑查看第三方组件库,该组件库具有基于UIData的组件,不呈现任何标记,例如Tomahawk的<t:dataList>

相关内容

  • 没有找到相关文章

最新更新