我的.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>
。