首页 > 解决方案 > jsf获取bean内部的请求参数

问题描述

我知道这之前已经讨论过,但是我创建的示例不起作用。

豆:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.*;

import java.io.Serializable;
import java.util.Map;

@ManagedBean
@SessionScoped
public class HelloBean implements Serializable {

private static final long serialVersionUID = 1L;

private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String submit() {
    FacesContext fc = FacesContext.getCurrentInstance();
    Map<String,String> params = 
            fc.getExternalContext().getRequestParameterMap();
    System.out.println("params" + params);

        String country = params.get("country");
        System.out.println("country:" + country);

    return "welcome";
}
}

这是页面:

</h:head>
<h:body>
    <h:outputScript library="js" name="common.js" />
    <!--  <h:outputScript library="js" name="websocket.js" /> -->
<h3>JSF 2.0 Hello World Example - hello.xhtml</h3>
<h:form>
    <h:inputText value="#{helloBean.name}"></h:inputText>
    <h:commandButton value="Welcome Me"  action="#{helloBean.submit}">    </h:commandButton> 
</h:form>



</h:body>
</html>

当我这样调用页面时:localhost:8080/JavaServerFaces2/hello.xhtml?country=123

并按下按钮,我希望提交方法会在控制台中打印国家/地区值。但它打印:

2018-05-13T17:06:48.872+0200|Info: params{j_idt7=j_idt7, j_idt7:j_idt8=,    j_idt7:j_idt9=Welcome Me, javax.faces.ViewState=-   4186994023180961740:1040096002697043710}
2018-05-13T17:06:48.872+0200|Info: country:null

为什么?

ps 我急切地等待粘贴代码的新功能,我相信它会很棒。

标签: jsf

解决方案


将 .xhtml 中的表单更改为:

<h:form>
    <h:inputText value="#{helloBean.name}"></h:inputText>
    <h:commandButton value="Welcome Me"  action="#{helloBean.submit}"> 
    <f:param name="country" value="#{param.country}" />
    </h:commandButton>
</h:form>

并且请求参数从第一个页面视图中保留并显示在控制台中


推荐阅读