我的.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);
}
我正在将新的Course对象与null price additionalInfo和date添加到ui:repeat使用的列表中。
相反,我得到了新的
<div class="term">
从上一个条目复制值的部分。
当我从列表中删除元素时(在删除了listBean中的正确对象),我看到刚删除的对象中的数据:/
有人遇到过这种问题吗? 你有什么建议吗?
答案 0 :(得分:4)
这似乎是另一个<ui:repeat>
错误。 Mojarra的<ui:repeat>
有太多问题。第一步是通过用一个完整的UIData
组件(例如<h:dataTable>
)替换组件来排除组件被怀疑。如果它有效,那么它绝对是<ui:repeat>
中的一个错误,否则它只是你自己代码中的一个错误(根据我给出的代码,我没有看到任何错误,但我假设你的bean是{{ 1}})。
如果它确实是由@ViewScoped
本身引起的,那么第一步通常是升级到最新的Mojarra版本。对于Servlet 2.5容器,这是currently 2.0.6,对于Servlet 3.0容器,这是2.1.4。如果这不能解决问题,那么您应该考虑用MyFaces替换Mojarra,它具有不同且更好的<ui:repeat>
实现。如果由于某种原因这不是一个选项,那么您应该考虑查看具有基于<ui:repeat>
的组件的第三方组件库,该组件不会呈现任何标记,例如Tomahawk's {{1 }}