私がやろうとしているのは、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 になります。それは私が得られないものです。すべてのページが再レンダリングされていないことが原因でしょうか?