我的Richfaces 4.0项目不适用于ui:composition标签

时间:2011-04-28 11:29:55

标签: java jsf richfaces

我的Richfaces 4.0项目不适用于ui:composition标签。

这是一个xhtml文件代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:rich="http://richfaces.org/rich"
 xmlns:a4j="http://richfaces.org/a4j">

  <h:head>
   <title>RichFaces</title>
  </h:head>
  <h:body>
  <ui:composition>
   <h:form>
        <h:selectOneMenu value="#{selectsBean.currentType}"
            valueChangeListener="#{selectsBean.valueChanged}">
            <f:selectItems value="#{selectsBean.firstList}" />
            <a4j:ajax event="valueChange" render="second" execute="@this" />
        </h:selectOneMenu>
        <a4j:outputPanel id="second" layout="block">
            <h:selectOneMenu value="#{selectsBean.currentType}"
                rendered="#{not empty selectsBean.currentType}">
                <f:selectItems value="#{selectsBean.secondList}" />
            </h:selectOneMenu>
        </a4j:outputPanel>
    </h:form>
  </ui:composition>
  </h:body>
</html>

如果我删除ui:composition标签,页面工作正常,但是使用此标签时,外观不会加载,而valueChangeListener也不起作用。哪里可能是问题?

UPD: 托马斯指出了一个错误,但页面仍无效。现在xhtml文件内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">
   <h:form>
        <h:selectOneMenu value="#{selectsBean.currentType}"
            valueChangeListener="#{selectsBean.valueChanged}">
            <f:selectItems value="#{selectsBean.firstList}" />
            <a4j:ajax event="valueChange" render="second" execute="@this" />
        </h:selectOneMenu>
        <a4j:outputPanel id="second" layout="block">
            <h:selectOneMenu value="#{selectsBean.currentType}"
                rendered="#{not empty selectsBean.currentType}">
                <f:selectItems value="#{selectsBean.secondList}" />
            </h:selectOneMenu>
        </a4j:outputPanel>
    </h:form>
  </ui:composition>

1 个答案:

答案 0 :(得分:1)

来自facelets doc:Any content outside of the UI Composition tag will be ignored by the Facelets view handler.

来自官方JSF2文档:JSF disregards everything outside of the composition...

AFAIK <ui:composition>标记必须是文件中的顶级元素。