1

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

4

1 に答える 1

1

JSF2 は and を使用して GET パラメータを処理できます<h:link>(<h:button>このページを確認してください) GET パラメータを処理する (それらをバッキング Bean にバインドする) 必要がある場合は、関連する 2 つの質問があります。

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

また、fc.getExternalContext().getRequestParameterMap().get("printHello") を機能させるには、コードを@PostConstructコンストラクターではなくアノテーション付きメソッドに移動し、バッキング Bean に適切なスコープがあることを確認してください。

于 2013-01-03T06:08:54.670 に答える