首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jsf 2 managedproperty注释和参数

jsf 2 managedproperty注释和参数
EN

Stack Overflow用户
提问于 2013-04-11 21:42:55
回答 1查看 6.1K关注 0票数 0

我使用的是JSF2和sprig3,我想从使用faces-config.xml迁移到注释。

老版本: faces-config.xml:

代码语言:javascript
运行
复制
<managed-bean> 
    <managed-bean-name>banqueBean</managed-bean-name>
    <managed-bean-class>commun.BanqueBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>banqueService</property-name>
        <value>#{banqueService}</value>
    </managed-property>
    <managed-property>
        <property-name>banqueId</property-name>
        <value>#{param.banqueId}</value>
    </managed-property>
</managed-bean>

新的:

代码语言:javascript
运行
复制
public class BanqueBean{
    private Banque banque;
    @ManagedProperty(name = "banqueService", value = "#{banqueService}")
    private BanqueService banqueService;
    @ManagedProperty(value = "#{param.banqueId}")
    private String banqueId;

    // setters for banqueService and banqueId

使用以下命令设置banqueId的值:

代码语言:javascript
运行
复制
<f:param value="#{banque.id}" name="banqueId" />

问题是,当使用faces-config.xml时,“系统”在调用参数banqueId的设置器之前调用banqueService的设置器,这样我就可以在setBanqueId方法中使用banqueService。

当使用注解时,它会在banqueService之前调用banqueId的设置器,这样我就会得到null作为它的值。

为什么它颠倒了这两个方法的调用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-11 21:55:08

您根本不应该依赖托管属性setter方法调用顺序。这在规范中没有定义。

只需在JSF完成所有托管属性设置时挂接即可。这是带@PostConstruct注释的方法。

代码语言:javascript
运行
复制
@PostConstruct
public void init() {
    banque = banqueService.find(banqueId);
}

停止在setter中执行业务逻辑,只有当您仍在使用不支持@PostConstruct的遗留JSF1.1时,才需要这样做。

与无关的具体问题,你知道新的JSF2 <f:viewParam>吗?它也可以帮助您摆脱bean中的这种样板,最终只有一个Banque属性和一个可重用的Converter

另请参阅:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15950401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档