【问题标题】:What is the correct way to get parameter from URL in JSF从JSF中的URL获取参数的正确方法是什么
【发布时间】: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=123 in URL 应该将“123”值设置为 ProductDetailBean.id 并且&lt;h:outputText value="1=#{productDetailBean.id}" /&gt; 打印此值,但什么也没有。
  • 让我重新表述一下:您的代码的哪一部分实际上将请求参数物理地放在了 ID 对象属性中?答案是:没有任何代码在这样做。难怪如果你没有正确初始化它会得到一个空值。
  • &lt;f:viewParam name="id" value="#{productDetailBean.id}"/&gt; 应该做所有的工作,如图所示here
  • ...哇,我需要检查我的眼睛,我很抱歉。所以问题是:为什么 f:viewParam 没有做它应该做的事情。恐怕我没有答案。当您在 getId() / setId() 方法中放置断点或 System.out.println() 语句时会发生什么?编辑:这可能是相关的:stackoverflow.com/questions/18025508/…

标签: java jsf glassfish-4


【解决方案1】:

尝试使用 GlassFish 4 至少使用 2.2.2。之前的 2.2.x Mojarra 版本与新的 http://xmlns.jcp.org/jsf/ JSF 命名空间存在众所周知的兼容性问题。

另请参阅:

【讨论】:

  • 将 Mojarra 更新到 2.2.5,一切正常。谢谢你。非常感谢您的帮助!
猜你喜欢
  • 2013-07-27
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 2021-04-08
  • 2015-07-29
相关资源
最近更新 更多