【问题标题】:Is it possible to set variable name in bean injection?是否可以在 bean 注入中设置变量名?
【发布时间】:2016-05-12 14:06:08
【问题描述】:

我在应用程序中的几乎所有 jsf bean 中都使用了一个 jsf bean,我不想在注入 bean 实例时对 bean 名称进行硬编码。是否可以将其设为变量并在任何地方使用该变量?

@ManagedBean (name=ApplicationInfo.BEAN_NAME_APPLICATION_INFO, eager=true)
@ApplicationScoped
@SuppressWarnings("serial")
public class ApplicationInfo extends ParentBean
{
    public static final String      BEAN_NAME_APPLICATION_INFO="applicationInfo";
    .....
}

现在是引用类

@ManagedBean
@ViewScoped
public class SearchResultsBean extends ParentBean
{
    private static final long serialVersionUID = 1L;
    @ManagedProperty (value="#{ApplicationInfo.BEAN_NAME_APPLICATION_INFO}")
    private ApplicationInfo applicationInfo;
    ....
}

有可能吗?

谢谢

【问题讨论】:

  • 您是否意识到托管属性值的 ApplicationInfo.BEAN_NAME_APPLICATION_INFO 部分是完全硬编码的字符串,而不是字符串中内联的变量?

标签: jsf managed-bean


【解决方案1】:

不,抱歉,您不能为托管 bean 设置变量名。 这里有指向 ManagedBean 注释文档的链接

https://docs.oracle.com/javaee/6/api/javax/faces/bean/ManagedBean.html

您可以看到“在为任何请求提供服务之前,必须在应用程序启动时扫描类是否存在此注释。” 所以bean的名字可能只是一个硬编码的字符串。每次评估(例如计算 ApplicationInfo.BEAN_NAME_APPLICATION_INFO 的值)都会在稍后启动应用程序时进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多