我有以下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=1
将id
作为查询字符串参数传递。
尝试在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
。
参见
另请参见