ExternalContext没有提供GET请求参数#getRequestParameterMap()



我想做的是能够通过URL传递参数并执行某些操作,如果此参数正在传递或不传递。我正在使用JSF + Richfaces。

例如,如果我尝试访问http://localhost/myapp/home.jsf

public class My Bean {
private boolean printHello = false;
public MyBean(){
  FacesContext fc = FacesContext.getCurrentInstance();
  String printHello = fc.getExternalContext().getRequestParameterMap().get("printHello");
  if (printHello != null && printHello.equals("true")
    printHello = true;
}
public void myFunction() {
  if (printHello)
    System.out.println("test");
    //other stuff
    //ask for some user input
}
//When user validate his input, this function is called
public void myFunction2() {
  //some stuff
}

}

当我在myFunction()中请求用户输入时,我在页面上也有一个链接来开始所有的过程。如果点击该链接后,然后手动更改url到http://localhost/myapp/home.jsf?printHello = true

这个bean不会被清除,我的printHello标志仍然会被设置为false。

同样,当以下语句再次执行时:

FacesContext fc = FacesContext.getCurrentInstance();
String printHello = fc.getExternalContext().getRequestParameterMap().get("printHello");

printHello将为null,这是我没有得到的。也许是因为没有重新渲染所有的页面?

JSF2可以使用<h:link><h:button>处理GET参数(查看此页)如果你需要处理GET参数(将它们绑定到你的后台bean),这里有两个相关的问题:

  1. https://stackoverflow.com/a/7775203/141438
  2. https://stackoverflow.com/a/3355737/141438

也为了有fc.getExternalContext(). getrequestparametermap ().get("printHello")的工作,移动你的代码到一个@PostConstruct注释的方法而不是构造函数,并确保你的后台bean有一个适当的范围。

相关内容

  • 没有找到相关文章

最新更新