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



我有以下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;
    }
}

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

尝试在init()方法中显示id总是null

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

我在这里俯瞰什么?

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

f:viewParam的值在@PostConstruct期间不可用。请改用f:viewAction

参见

另请参见

相关内容

  • 没有找到相关文章

最新更新