JSF2 Spring3集成

时间:2011-09-20 15:44:56

标签: spring jsf jsf-2

@ManagedBean(name="helloBean")
@SessionScoped
public class HelloBean implements Serializable {
    @Inject
    @Named("loginService")
    LoginService loginService;

    private String name;

    public String getName() {
        return name+"-->"+loginService.serviceDetails();
    }

    public void setName(String name) {
        this.name = name;
    }
}

...

    @Named("loginService")
    public class LoginServiceImpl implements LoginService {

        public String serviceDetails() {
            return "==From Service==";
        }
    }

ApplicationContext.xml文件:

<beans
    <context:component-scan base-package="com.myapp"/>
</beans>

我在返回时获取loginService的空指针异常 name+"-->"+loginService.serviceDetails();

1)如何解决上述问题

2)我可以使用@ManagedBean(name="helloBean")代替@Inject吗?怎么做?

1 个答案:

答案 0 :(得分:0)

我认为你不能同时使用@ManagedBean和弹簧。如果您希望bean由spring管理,则需要使用spring ELResolver(在faces-config.xml中),然后在JSF bean上使用@Named@Scope("session")。然后,您可以(并且必须)使用@Inject而不是@ManagedX

作为旁注 - 避免按名称引用非jsf bean - 仅依赖于它们的类型 - 至少可以减少重构的麻烦。对于JSF bean,您可以依赖默认命名并使用@Named而不使用参数。