0

我有一个 .xhtml 页面的以下部分:

<ui:composition template="./templates/template.xhtml">
<ui:define name="mainContent">

    <ui:include src="include/includeAbleEditor.xhtml">
        <ui:param name="includeParam" value="MyClass" />

    </ui:include>



    <ui:include src="include/includeAbleEditor.xhtml">
        <ui:param name="includeParam" value="YourClass" />
    </ui:include>

</ui:define>

在“includeAbleEditor.xhtml”中,我想在包含一个方法后调用它(在这种情况下,这应该发生两次)。

现在我尝试像这样解决它:(元数据标记是 includeAbleEditor.xhtml 的一部分)

<f:metadata>
    <f:event type="preRenderView" listener="#{editor.onload}" />
    <f:attribute name="textFieldId" value="#{includeParam}" />
</f:metadata>

问题:

该方法仅被调用一次。但它应该被调用两次。一次使用参数“MyClass”,一次使用“YourClass”。

你有什么建议吗?

非常感谢!

4

1 回答 1

2

整个视图中只能有一个<f:metadata>,并且必须在顶层视图中。与 eg 不同<f:view>,它们不会相互“扩展”,所有其他的都将被忽略。

你在这里实际上不需要它。仅当您需要附加<f:viewParam>和/或<f:viewAction>特定视图时才需要。<f:event>不需要<f:metadata>. _ 它只会与 parent 挂钩UIComponent。这是在 JSF 2.0/2.1 时代(当时<f:viewAction>不存在)被滥用以在<f:viewParam>设置值后使用挂钩来调用侦听器。只是出于自我记录的目的,将其放置在与<f:metadata>所有<f:viewParam>s 相同的位置。

所以,只是摆脱它。

<f:event type="preRenderView" listener="#{editor.onload(includeParam)}" />

也就是说,这postAddToView可能是一个更好的事件。并且为了避免以后在所有地方出现“重复的组件 ID”错误,请考虑将其包装<f:subview>或使其成为复合材料。

也可以看看:

于 2015-06-04T13:09:43.777 回答