我无法访问辅助bean中的GET参数。 example.xhtml文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:metadata>
<f:viewParam name="id" value="#{myBackingBean.unitId}" />
<f:viewAction action="#{myBackingBean.findUnits}" />
</f:metadata>
<head>
<title>Example Title</title>
</head>
<body>
I found #{myBackingBean.units.size()} units.
</body>
</html>
我的理解是,当我获取example.jsf?id = 3时,JSF会调用myBackingBean.setUnitId(3)。正确的吗?
这是MyBackingBean:
@Model
public class MyBackingBean {
private static Logger logger = Logger.getLogger(MyBackingBean.class
.getName());
//@ManagedProperty("#{param.id}")
private Long unitId;
@Inject
private IExampleEJB myExampleEjb;
private List<Unit> units;
@PostConstruct
public void postConstruct() {
Map<String, String> mymap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
for (String k:mymap.keySet()) {
logger.info(String.format("%s %s", k,mymap.get(k)));
}
}
public void findUnits() {
logger.info(String.format("MyBackingBean findUnits %d", unitId));
units = myExampleEjb.findUnits();
}
public List<Unit> getUnits() {
return units;
}
public void setUnits(List<Unit> units) {
this.units = units;
}
public Long getUnitId() {
return unitId;
}
public void setUnitId(Long unitId) {
this.unitId = unitId;
}
}
id参数位于postConstruct()中的参数请求映射中。
就我而言,从不调用setUnitId(),也不调用findUnits()。
在一个不同但相关的问题中,@ ManagedProperty(目前被注释掉)也不起作用。
答案 0 :(得分:0)
鉴于xmlns.jcp.org
命名空间,您使用的是JSF 2.2。早期的Mojarra 2.2.0和2.2.1版本有一个已知的错误导致<f:viewParam>
不起作用。
根据您使用GlassFish 4.0的评论。如果您没有升级其捆绑的JSF实现并因此使用早期的Mojarra 2.2.0版本,那么您肯定面临这个错误,并且需要升级。
您可以从http://javaserverfaces.java.net获取JAR。您需要做的就是使用较新版本替换GlassFish的javax.faces.jar
文件夹中的/modules
文件。