我正在使用带有PrimeFaces的JSF 2,而我的facelet有commandLinks(或commandButtons),它调用通过ui:param传入的bean的方法。
我的facelet xhtml希望dialogBean
作为ui:param
<h:panelGroup>
<p:commandButton
value="#{msgs.ok}"
actionListener="#{dialogBean.okClicked}"
process="#{dialogId}"
update="#{dialogId}, #{externalIdsToUpdateOnOk}"
styleClass="dialogBottomBtn"
/>
<p:commandButton
value="#{msgs.cancel}"
actionListener="#{dialogBean.close}"
process="@this"
update="#{dialogId}"
styleClass="dialogBottomBtn"
/>
</h:panelGroup>
facelet包含如下:
<ui:include src="/faces/common/dialogButtons.xhtml">
<ui:param name="dialogId" value="textBlockQuestionDialog" />
<ui:param name="dialogBean" value="#{formEditor.textBlockQuestionDialog}" />
<ui:param name="externalIdsToUpdateOnOk" value=":form:tree, :form:properties, :form:preview" />
</ui:include>
失败并出现此错误:
javax.el.PropertyNotFoundException: Target Unreachable,
identifier 'dialogBean' resolved to null
我尝试将#{dialogBean.close}
替换为#{dialogBean['close']}
,将#{dialogBean[action]}
替换为action
定义为param,没有任何帮助。
dialogBean
及类似输出一起使用时, h:outputText
会得到解决。此外,当我将actionListener
替换为action
时,此示例也有效。
任何想法?
答案 0 :(得分:0)
我想我找到了答案。
仔细检查您的dialogBean
对象的actionListener方法(okClicked
等)是否采用ActionEvent
参数。
似乎这个参数对于ui:param
传递的bean是必需的,而不是其他的。
我怀疑发生的事情是这样的:
dialogBean
okClicked(ActionEvent)
参数
dialogBean
okClicked(ActionEvent)
的bean
dialogBean
okClicked()
的bean
醇>
其中无参数方法仅在bean名称直接匹配时使用,而不是通过ui:param引用间接匹配。