在视图范围的托管bean中的post构造方法中访问查询字符串参数

时间:2014-04-11 21:23:46

标签: jsf jsf-2.2

我有以下XHTML页面。

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">

    <h:head>
        <title>Test</title>
    </h:head>

    <f:metadata>
        <f:viewParam name="id" value="#{testManagedBean.id}" maxlength="20"/>
    </f:metadata>

    <h:body>
        <h:form id="form" prependId="true">

        </h:form>
    </h:body>
</html>

托管bean对应于上面的JSF页面。

@ManagedBean
@ViewScoped
public final class TestManagedBean implements Serializable
{
    private static final long serialVersionUID = 1L;
    private Long id;

    @PostConstruct
    private void init() {
        System.out.println("id = "+id);
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

我使用网址idhttps://localhost:8181/Project-war/admin_side/Test.jsf?id=1作为查询字符串参数传递。

尝试在id方法中显示init()始终为null

这是一个示范。实际上,<f:viewParam>实际上放在<ui:define name="metaData">内,并且定义了主模板<ui:insert name="metaData"/>

我在这里俯瞰什么?

我有几次传递这样的参数并使用适当的转换器转换为JPA实体,但我不知道为什么标量值没有被设置为托管bean的属性。我已经尝试将id的类型更改为String,但这也没有帮助(也@ManagedProperty(value="#{id}")没有帮助。)

1 个答案:

答案 0 :(得分:3)

f:viewParam期间无法使用@PostConstruct的值。请改用f:viewAction

See

See also