JSF @ManagedProperty不起作用

时间:2012-04-08 00:36:22

标签: jsf jsf-2

在各个地方,他们说你应该使用@ManagedProperty来获取请求参数。问题是我尝试从请求字符串中获取令牌,但它始终保持为空。

调用页面的链接如下所示:

http://example.com/faces/Check.xhtml?token=EC-8AT450931P272300C&ID=VKEFF29XNGNJG

豆子:

@Named(value = "bean")
@RequestScoped
public class Bean implements Serializable {

    @Inject
    private AccountBean account;
    @Inject
    private Service web;
    @ManagedProperty(value = "#{param.token}")
    private String token;
    @ManagedProperty(value = "#{param.ID}")
    private String id;

    @PostConstruct
    public void init() {
        System.out.println("token: " + token);
    }

页面

<ui:define name="content">
    <h:form>
        <pou:commandButton action="#{bean.test()}" value="complete"/>
    </h:form>
</ui:define>

我试过的其他事情:

Map<String, String> e = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

这也不包含请求参数。对于所有可以获取请求的facesContext事物也是如此。

帮助将不胜感激。

P.S。我无法改变背后的一切?导致它从一个不在我手中的程序调用

1 个答案:

答案 0 :(得分:0)

好的,它成功了。

@Inject to pass params to a CDI @Named bean via URL

这是向我的网站添加更多内容所需的解决方案

<ui:define name="content">
    <h:form>
        <h:inputHidden value="#{bean.token}"/>
        <h:inputHidden value="#{bean.id}"/>
        <pou:commandButton action="#{bean.test()}" value="complete"/>
    </h:form>
</ui:define>

从命名

中删除#{param.xxx}部分
@Inject @HttpParam
private String token;
@Inject @HttpParam(value = "ID")
private String id;