【发布时间】:2016-01-20 16:21:36
【问题描述】:
有manyothertopics关于如何覆盖JSF中现有的渲染器。所有这些都导致 faces-config 中的相同条目。你“只”需要一个component-family、renderer-type、render-kit-id 和你在renderer-class 中的实现
我理解并且可以重现所有这些示例,但在我的具体情况下,我想覆盖 <ui:include> 和 <ui:insert> 的行为。遗憾的是,我不知道我必须在上面提到的属性中输入哪些值,因为文件 ui:taglib.xml 不像其他标记库那样冗长。
你知道如何覆盖它们吗?
编辑: BalusC 提到了another topic,它使用自定义标签,如<my:include> 或<my:insert>,但我不想使用这些。如果这样做,我必须重构所有现有代码,如果不使用我的自定义 taglib,我未来的代码将无法工作。
我想在渲染<ui:include> 和<ui:insert> 之前进行挂钩,这样我就可以重用我即将开发的插件而不更改任何现有代码。
【问题讨论】:
-
"... 不更改任何现有代码":你不能。至少,并非没有与特定实现(Mojarra 或 MyFaces)紧密耦合。如果这不是问题,那么请告诉您希望获得哪个实现的答案。否则,回答者必须考虑所有实现特定的解决方案,这有点过火了。另一种选择是咬紧牙关,将所有
<ui:include>替换为<my:include>(但您已经知道了)。 -
嗨 BalusC。很高兴知道,一个通用的解决方案是不可能的,所以我可以停止搜索它。我找到了this issue,我尝试做他想做的事情。但他的回答也没有得到满意的回答。当我使用 JSF 事件(PreRenderView 或 preRenderComponent)时,xhtml 文件已经包含在内 - 所以我丢失了这些信息。
-
合理的要求。这可以做到,但不幸的是,解决方案将是特定于实现的,您只能将其绑定到 webapp(因此不能使其成为库的一部分)。因此,如果您说出您正在使用哪个实现,那么您就可以得出一个答案。
-
谢谢!我正在使用 Mojarra 2.1.19。今天我还尝试自定义 ui:debug - 没有工作。我很震惊 JSF 规范没有提供足够的钩子来挂钩:(