繁体   English   中英

在JSF中每包含一个.xhtml页面之后,如何调用同一方法?

[英]How to call the same method after every include of a .xhtml page in JSF?

我有一个.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: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>或将其组合。

也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM