jsf 2 -如何在jsf中每次包含.xhtml页面后调用相同的方法



我有一个。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"。

你有什么建议吗?

非常感谢!

整个视图中只能有一个<f:metadata>,并且必须在顶层视图中。不像<f:view>,它们不会"扩展"。对方和其他所有人都将被忽略。

实际上你在这里不需要它。只有在需要将<f:viewParam>和/或<f:viewAction>附加到特定视图时才需要这样做。<f:event>不需要<f:metadata>。它将被钩到父UIComponent。在JSF 2.0/2.1时代(当时<f:viewAction>还不存在),有一个钩子在设置了<f:viewParam>的值之后调用侦听器。这只是出于自我记录的目的,将所有<f:viewParam>放在同一个<f:metadata>中。

所以,把它删掉。

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

也就是说,postAddToView可能是一个更好的事件来挂钩这一切。并避免"重复组件id"以后在所有地方出现错误时,请考虑将其包装在<f:subview>中或使其成为复合。

参见:

  • 使用模板,我应该在哪里声明?
  • 什么可以和& lt; f: viewAction>被用于?
  • 在相同的命名容器中重用facelets组合时避免重复的id

相关内容

  • 没有找到相关文章

最新更新