我想做的是能够通过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),这里有两个相关的问题:
- https://stackoverflow.com/a/7775203/141438
- https://stackoverflow.com/a/3355737/141438
也为了有fc.getExternalContext(). getrequestparametermap ().get("printHello")的工作,移动你的代码到一个@PostConstruct
注释的方法而不是构造函数,并确保你的后台bean有一个适当的范围。