[英]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.