在我的实际项目中,我注意到填充ui:repeat标签的方法在有post调用时被调用,即使ui:repeat不是提交表单的一部分。
我一直在尝试检查 jsf 文档是否是它应该工作的方式,但没有成功。
它应该以这种方式工作吗?
提前谢谢。
示例代码:
单击按钮时,将调用另一个Bean.getCollection的方法:
<h:form id="firstForm">
<h:commandButton action="#{someBean.someAction}"/>
</h:form>
<h:form id="secondForm">
<ui:repeat var="product" value="#{anotherBean.populatCollection}" >
<!-- CODE -->
</ui:repeat>
</h:form>
首先,getter 方法根本不应该填充值。getter 方法应该,顾名思义,只返回已经填充的值。
您对具体的功能要求不是很清楚,即您打算在何时填充值,但一种方法是将填充逻辑移动到#{anotherBean}
的@PostConstruct
。
@ManagedBean
@ViewScoped
public class AnotherBean {
private List<Something> getCollection; // Terrible variable name by the way.
@PostConstruct
public void init() {
getCollection = populateItSomehow();
}
public List<Something> getGetCollection() {
return getCollection; // See, just return the property, nothing more!
}
}
另请参阅:
- 为什么 JSF 多次调用 getter
因此,看起来ui:repeat
标签在完成发布时调用分配给其value
参数的方法,无论帖子是否从另一个表单完成。
感谢您的帮助。