注意到从JSF视图元数据揭秘 :
由于此标记与当前视图元数据有关,因此它不参与XHTML模板(页面作者必须确保元素不出现在模板或包含的页面上;它可以在模板客户端中)并且它是<f:view>直接子元素<f:view> 。
我有多个<f:viewParam>和<f:event>在许多XHTML页面中重复,而这些页面又是template.xhtml客户端。 每个f:event依赖于给定的托管bean,其中托管bean对于每个XHTML页面是不同的(但是尊重公共接口,即,对于每个相关的托管bean存在相同的侦听器操作):
<f:view> <f:metadata> <!-- I want to share this across many XHTML parametrised by the bean --> <f:viewParam name="id" value="#{particularBean.id}"/> <f:event type="preRenderView" listener="#{particularBean.opCommon1}"/> <f:event type="preRenderView" listener="#{particularBean.opCommon2}"/> <!-- END SHARED PORTION --> <f:event type="preRenderView" listener="#{particularBean.onlyForMe}"/> </f:metadata> </f:view> <ui:composition template="/template.xhtml">问:如何封装共享的<f:viewParam>和<f:event>部分,以便它可以“包含”并作为公共策略片段处理,特定的托管bean(满足公共接口)为每个传入XHTML页面?
Noting that from JSF view metadata demystified:
Since this tag is about current view metadata it doesn't participate in XHTML templates (the page author must ensure that the element does not appear on a template or included page; it can be in a template client) and it is direct child of <f:view>.
I have multiple <f:viewParam> and <f:event> that repeat in many XHTML pages, which are in turn clients of a template.xhtml. Each f:event depends on a given managed bean, where the managed bean is different for each XHTML page (but respects a common interface, i.e., the same operations for the listeners exist for every relevant managed bean):
<f:view> <f:metadata> <!-- I want to share this across many XHTML parametrised by the bean --> <f:viewParam name="id" value="#{particularBean.id}"/> <f:event type="preRenderView" listener="#{particularBean.opCommon1}"/> <f:event type="preRenderView" listener="#{particularBean.opCommon2}"/> <!-- END SHARED PORTION --> <f:event type="preRenderView" listener="#{particularBean.onlyForMe}"/> </f:metadata> </f:view> <ui:composition template="/template.xhtml">Q: How can I encapsulate the shared <f:viewParam> and <f:event> portion so that it can be "included" and treated as a common policy fragment, with particular managed beans (meeting the common interface) passed in for each XHTML page ?
最满意答案
我在我自己的一个旧项目中找到了答案(正如我发布的那样,我在几年前的某个阶段已经模糊地回忆过我已经调查过了)。 这有效:
在/include/shared.xhtml :
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" > <f:viewParam name="id" value="#{particularBean.id}"/> <f:event type="preRenderView" listener="#{compatibleBean.opCommon1}"/> <f:event type="preRenderView" listener="#{compatibleBean.opCommon2}"/> </ui:composition>在任何客户:
<f:view> <f:metadata> <ui:include src="/included/shared.xhtml"> <ui:param name="compatibleBean" value="#{particularBean}"/> </ui:include> <f:event type="preRenderView" listener="#{particularBean.onlyForMe}"/> </f:metadata> </f:view>I found the answer in one of my own older projects (as I posted I recalled vaguely I had investigated this already at some stage years ago). This works:
In /include/shared.xhtml:
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" > <f:viewParam name="id" value="#{particularBean.id}"/> <f:event type="preRenderView" listener="#{compatibleBean.opCommon1}"/> <f:event type="preRenderView" listener="#{compatibleBean.opCommon2}"/> </ui:composition>And in any client:
<f:view> <f:metadata> <ui:include src="/included/shared.xhtml"> <ui:param name="compatibleBean" value="#{particularBean}"/> </ui:include> <f:event type="preRenderView" listener="#{particularBean.onlyForMe}"/> </f:metadata> </f:view>更多推荐
<f,XHTML,bean,页面,电脑培训,计算机培训,IT培训"/> <meta name="descripti
发布评论