【发布时间】:2014-03-27 22:11:34
【问题描述】:
这是我的 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>
还有豆子
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
我得到输出
1=
2=123
3=123
第二种和第三种方式工作正常。 为什么第一个不起作用?获取参数的正确方法是什么?
【问题讨论】:
-
那么您实际上是在哪里填充 bean 的 id 属性?
-
?id=123in URL 应该将“123”值设置为 ProductDetailBean.id 并且<h:outputText value="1=#{productDetailBean.id}" />打印此值,但什么也没有。 -
让我重新表述一下:您的代码的哪一部分实际上将请求参数物理地放在了 ID 对象属性中?答案是:没有任何代码在这样做。难怪如果你没有正确初始化它会得到一个空值。
-
<f:viewParam name="id" value="#{productDetailBean.id}"/>应该做所有的工作,如图所示here -
...哇,我需要检查我的眼睛,我很抱歉。所以问题是:为什么 f:viewParam 没有做它应该做的事情。恐怕我没有答案。当您在 getId() / setId() 方法中放置断点或 System.out.println() 语句时会发生什么?编辑:这可能是相关的:stackoverflow.com/questions/18025508/…
标签: java jsf glassfish-4