动态UI包含和P:SelectOneMenu之间是否存在不兼容性

时间:2014-09-10 14:54:05

标签: jsf primefaces

我有一个包含动态内容的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>

1 个答案:

答案 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>