如何修复“目标无法访问,标识符'bean'解析为null”?

时间:2012-10-26 20:47:18

标签: jsf primefaces cdi codi view-scope

我使用JSF 2.1.7与Primefaces 3.2,CDI和Apache MyFaces CODI访问@ViewScoped。

一切都工作得非常好但是当我通过ui:param将bean传递到另一个页面然后尝试使用该bean专门用于ap:ajax请求时,我收到消息“Target Unreachable,identifier'bean '已解决无效“

<ui:include src="page.xhtml">
   <ui:param name="bean" value="#{formBean}" />
</ui:include>

然后在page.xhtml上我尝试这样做。

<p:gmap zoom="15" type="HYBRID" model="#{bean.simpleModel}">
   <p:ajax event="markerDrag" listener="#{bean.onMarkerDrag}" />
</p:gmap>

对bean.simpleModel的第一次调用正确解析。对bean.onMarkerDrag的ajax调用不会。

我对formBean的声明是@Named(“formBean”),@ ViewScoped。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。在我的情况下,我使用了

<p:commandButton value="Edit" icon="ui-icon-pencil" actionListener="#{bean.edit}" />

通过<ui:include>包含的模板内部,并收到相同的错误消息。

有趣的是,以下替代方案确实有效:

actionListener="#{bean.edit()}"
action="#{bean.edit}"
action="#{bean.edit()}"

也许你应该尝试

<p:ajax event="markerDrag" listener="#{bean.onMarkerDrag()}" />

即。在方法表达式中添加括号。

答案 1 :(得分:0)

@ViewScoped与CDI相比很棘手,它不完全兼容。考虑尝试@SessionScoped。

如果有效,请尝试使用@ViewAccessScoped(因为您使用Codi)。该范围基本上使ViewScope适用于CDI使用。

仍有问题或已经使用过吗?然后尝试@SessionScope并报告发生的事情。

答案 2 :(得分:0)

这不起作用,因为它违反了@ViewScoped规则