我有一个包含多个文件的文件
<ui:include src="file1.xhtml" />
<ui:include src="file2.xhtml" />
<ui:include src="file3.xhtml" />
<ui:include src="file4.xhtml" />
提交文件后,我将获取所有包含文件的Managed bean并调用save方法
FacesContext ctx = FacesContext.getCurrentInstance();
File1ManagedBean fmb =(File1ManagedBean)ctx.getApplication().evaluateExpressionGet(ctx, "#{file1ManagedBean}", File1ManagedBean.class);
fmb.saveApplication();
现在在这个文件中,我有另一个名为"添加另一个成员"的按钮,它将再次重复那些包含的文件。那件事我做不到。我尝试过ui:重复,但问题是我加载相同的管理bean两次,两者都复制相同的值。那么,我怎样才能实现同样的功能呢
这确实是一种尴尬的方法。我可以理解为什么您在维护和扩展它时感到困惑和受阻。只是不要让所有这些模型都独立管理bean。只需将所有这些模型作为单个托管bean的属性,该bean在单个位置管理它们。
。
@Named
@ViewScoped
public class FileManagedBean implements Serializable {
private List<FileModel> fileModels;
@PostConstruct
public void init() {
fileModels = new ArrayList<>();
addFileModels();
}
public void addFileModels() {
fileModels.add(new File1Model());
fileModels.add(new File2Model());
fileModels.add(new File3Model());
fileModels.add(new File4Model());
}
public void saveFileModels() {
for (FileModel fileModel : fileModels) {
fileModel.saveApplication();
}
}
public List<FileModel> getFileModels() {
return fileModels;
}
}
<c:forEach items="#{fileManagedBean.fileModels}" var="fileModel">
<ui:include src="#{fileModel.includeSrc}" /><!-- inside include file, just use #{fileModel}. -->
</c:forEach>
<h:commandButton value="Add" action="#{fileManagedBean.addFileModels}" />
<h:commandButton value="Save" action="#{fileManagedBean.saveFileModels}" />
注意<ui:repeat><ui:include>
不能工作,原因如下:取决于