我在视图的相关部分而不必求助于@form
或类似的问题。
我有这样的复合组件:
wrapper.xhtml
:
<!DOCTYPE composition 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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j">
<cc:interface componentType="compositeComponent">
<cc:attribute required="false" name="foo" />
</cc:interface>
<cc:implementation>
<a4j:region>
<h:panelGroup id="content" layout="block" styleClass="my-wrapper">
<h1>TITLE</h1>
<c:forEach items="#{element.children}" var="element">
<ui:include src="element.xhtml">
<ui:param name="level" value="0" />
</ui:include>
</c:forEach>
</h:panelGroup>
</a4j:region>
</cc:implementation>
</ui:composition>
和element.xhtml
:
<!DOCTYPE composition 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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j">
<h:outputLabel styleClass="level-#{level}">
#{element.label}
<a4j:ajax event="click"
listener="#{controller.updateElements(element)}"
execute="@this" render="@region" />
</h:outputLabel>
<c:if test="#{element.someTest}">
<c:forEach items="#{element.children}" var="element">
<ui:include src="element.xhtml">
<ui:param name="level" value="#{level + 1}" />
</ui:include>
</c:forEach>
</c:if>
</ui:composition>
现在的问题是,尽管我在包装器周围设置了一个<a4j:region>
,并将孩子的渲染表达式设置为@region
,但它仍然只呈现在rerender上的单个孩子。
我搜索了网络,但找不到这样做的原因,包括Inclession是否会隐式创建名称空间或命名容器(将其视为区域?)?找不到这样的东西,但是如果是这样,我该如何避免这种情况?我想要整个包装器(仅此包装器,而不是@form
或@all
之类的)在单击孩子时都可以恢复。
我缺少什么?
@region
仅用于执行。<a4j:region>
不会生成任何HTML,因此您不能将其用于渲染。