【问题标题】:@ManagedProperty injected AFTER @PostConstruct@ManagedProperty 在@PostConstruct 之后注入
【发布时间】:2011-09-30 02:37:40
【问题描述】:

这个问题已经在 MYFACES 2.1 实现中得到解决

我有一个像这样正确传递整数参数的链接:

<h:link outcome="/process/createProcess">
    <f:param name="id" value="#{process.idprocess}" />
    Edit
</h:link>

它正确地转到“createProcess.xhtml?id=21”,我在请求范围内有这段代码支持 Bean createProcess:

@ManagedProperty(value="#{param.id}")
private Integer idProcess;

private Process newProcess;

@PostConstruct
public void init()
{
    log();
    if (idProcess!=null)
        newProcess = Dao.getProcessDAO().get(idProcess);
    else
        newProcess = new Process();
}

我注意到idProcess 始终为空。调试后我意识到 setIdProcess 方法被称为 AFTER @PostConstruct.

我知道注入是在构建 bean 之后完成的,所有 managedProperties 都在@PostConstruct 中可用。

我错过了什么?

【问题讨论】:

  • 这不应该发生。也无法在 Mojarra 2.1.1 上重现这一点。你到底在使用什么 JSF impl/version?
  • @BalusC Tomcat 7.0 上的 Apache MyFaces 2.0。我已经阅读了您博客中的文章以及您在此处的回答,您说注入的变量应该在@postconstruct 中可用,但不适用于我......
  • 我不做 MyFaces。在未来的 MyFaces 问题中,请这样标记。我已经在这个问题上添加了它。我只能建议尝试 Mojarra。即使只是为了测试排除一个和另一个,以便您可以向 MyFaces 人员写一份适当的问题报告。
  • 我将项目更新为 MyFaces 2.1,现在它首先注入变量,然后调用 @PostConstruct。最后,这是一个已经在最新版本(6 月 11 日)中修复的错误。 @BalusC 感谢您的建议,我会考虑的。

标签: jsf-2 annotations myfaces managed-bean


【解决方案1】:

仅供参考,我认为这篇文章的问题是MYFACES-3116,已经固定在,所以2.0.6、2.1.0及更高版本没有。

【讨论】:

    猜你喜欢
    • 2017-08-27
    • 2013-10-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多