我有一个包含动态内容的UI,当我按下某个命令链接时,将加载此内容。问题是,当我按下命令链接时,加载了UI include而没有创建PrimeFace的Javascript:
这个问题可能与@Resource Dependency有关。
这是我的控制器:
@Named
@ViewScoped
public class Test {
private String value;
private List<String> options=new ArrayList<>();
private String url="";
public String changeUrl(){
url="/snippets/test2.xhtml";
return "#";
}
@PostConstruct
public void init(){
options.add("test 1");
options.add("test 2");
options.add("test 3");
options.add("test 4");
}
//getter and setter
}
这是xhtml页面:
<h:form>
text
<ui:include src="#{test.url}" />
<p:commandLink action="#{test.changeUrl()}" value="submit" process="@this" update="@form"/>
</h:form>
这是包含的页面:
<ui:composition>
<h:form>
<p:selectOneMenu value="#{test.value}">
<f:selectItems value="#{test.options}"/>
</p:selectOneMenu>
</h:form>
</ui:composition>
答案 0 :(得分:2)
这里有两个问题:包含页面中的ui:composition声明缺少所有必需的命名空间声明,并且您正在另一个表单中嵌入表单。
您所包含的页面应如下所示:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<p:selectOneMenu value="#{test.value}">
<f:selectItems value="#{test.options}"/>
</p:selectOneMenu>
</ui:composition>