在JSF中从URL获取参数的正确方法是什么
问题描述:
这是我的JSF页面:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:metadata>
<f:viewParam name="id" value="#{productDetailBean.id}" />
</f:metadata>
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:outputText value="1=#{productDetailBean.id}" />
<br/>
<h:outputText value="2=#{param['id']}" />
<br/>
<h:outputText value="3=#{productDetailBean.param}" />
</h:body>
</html>
and bean
import java.io.Serializable;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@ViewScoped
public class ProductDetailBean implements Serializable{
private String id;
public String getParam(){
FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> paramMap = context.getExternalContext().getRequestParameterMap();
String projectId = paramMap.get("id");
return projectId;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
当我传递这样的参数时:/getshipment.xhtml ?id = 123
i获得输出
When i passing parameters like this: /getshipment.xhtml?id=123
i get output
1 =
2 = 123
3 = 123
1=
2=123
3=123
第二和第三种方式正常。
为什么第一个不工作?获取参数的正确方法是什么?
Second and third way are working fine. Why first one is not working ? And what is the correct way to get parameter ?
答
尝试使用GlassFish 4至少2.2.2。前2.2。 x Mojarra版本与新的 http://xmlns.jcp.org/jsf/
JSF命名空间有着众所周知的兼容性问题。
Try going with at least 2.2.2 with GlassFish 4. Prior 2.2.x Mojarra releases have well known compatibility issues with the new http://xmlns.jcp.org/jsf/
JSF namespaces.
参见:
- f:viewParam doesn't pass required parameter when new xmlns.jcp.org namespace is used