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 将为空,这就是我没有得到的。也许是因为不是所有页面都被重新渲染?

4

1 回答 1

1

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

  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 回答