Wal*_*lla 5 jsf jsf-2.2 passthrough-elements setpropertyactionlistener
我在JSF项目中使用Passthrough元素,并且需要执行以下操作:
<h:commandLink action="#{myBean.acao()}" value="click me">
<f:setPropertyActionListener target="#{myBean.object}" value="#{localObject}"/>
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)
但是使用Passthrough元素可以更好地控制前端,例如尝试以下操作:
<a href="#" jsf:action="#{myBean.acao()}">click me
<f:setPropertyActionListener target="#{myBean.object}" value="#{localObject}"/>
</a>
Run Code Online (Sandbox Code Playgroud)
但显然这不起作用,我收到以下错误消息:
<f:setPropertyActionListener> Parent is not of type ActionSource, type is: com.sun.faces.component.PassthroughElement
Run Code Online (Sandbox Code Playgroud)
有谁知道我该怎么解决?
看起来只是您的 Mojarra 版本中的一个错误。它适用于我当前最新的 2.2.12 版本。
您可以利用 EL 2.2 传递方法参数的功能来解决这个问题。另请参阅在 EL 中调用直接方法或带有参数/变量/参数的方法。它肯定在您的环境中可用,因为#{myBean.acao()}
显然没有抛出 EL 异常(EL 2.2 之前不支持此语法)。
<a href="#" jsf:action="#{myBean.acao(localObject)}">click me</a>
Run Code Online (Sandbox Code Playgroud)
如果您绝对需要在操作侦听器事件期间调用 setter,例如,因为您希望action
通过抛出AbortProcessingException
来控制调用,以防设置值无效,另请参阅action 和 actionListener 之间的差异,然后声明jsf:actionListener
.
<a href="#" jsf:actionListener="#{myBean.setObject(localObject)}" jsf:action="#{myBean.acao}">click me</a>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1247 次 |
最近记录: |