我有以下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;
}
}
我使用网址id
将https://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}")
没有帮助。)