【问题标题】:How to fix "Target Unreachable, identifier 'bean' resolved to null"?如何修复“目标无法访问,标识符 'bean' 解析为空”?
【发布时间】:2012-10-17 03:34:34
【问题描述】:

我正在使用 JSF 2.1.7 和 Primefaces 3.2、CDI 和 Apache MyFaces CODI 来访问 @ViewScoped。

一切正常,但是当我通过 ui:param 将 bean 传递到另一个页面,然后尝试通过 ap:ajax 请求专门使用该 bean 时,我收到消息“目标无法访问,标识符 'bean ' 解析为 null"

<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。

有什么想法吗?

【问题讨论】:

    标签: jsf primefaces cdi codi view-scope


    【解决方案1】:

    我也遇到了同样的问题。就我而言,我使用了

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

    在通过&lt;ui:include&gt; 包含的模板中并收到相同的错误消息。

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

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

    也许你应该试试

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

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

    【讨论】:

      【解决方案2】:

      这不行,因为它违反了@ViewScoped 的规则

      【讨论】:

        【解决方案3】:

        @ViewScoped 对 CDI 来说很棘手,它不完全兼容。考虑尝试使用@SessionScoped。

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

        还有问题还是已经在使用?然后尝试@SessionScope 并报告发生的情况。

        【讨论】:

        • ViewScoped 和 ViewAccessScoped 不一样。只有“视图”一词相同,但两个作用域的行为完全不同。使用 CODI,您可以同时使用 CDI。
        • 是的,对不起,我记错了。我误读了有关 codi for viewscope 中提供的适配器的文档
        • CDI 中确实没有(兼容的)ViewScoped 实现。那是 JSF 特有的,以这种方式混合 CDI/JSF 注释是行不通的。
        • @DarrellTeague 我在生产中使用来自 Codi 的适配器,它对我来说效果很好。
        • 这看起来不像是范围界定问题,而是在 的上下文中评估 的侦听器属性时出现的错误
        猜你喜欢
        • 2019-05-10
        • 2018-05-09
        • 2022-12-12
        • 2017-07-02
        • 2015-09-14
        • 1970-01-01
        • 2013-07-20
        • 2012-05-10
        • 2016-07-01
        相关资源
        最近更新 更多