带有get参数的JSF请求范围
我知道有很多类似的线程,但没有像我这样的线程: 我有一个requestscope bean:带有get参数的JSF请求范围,jsf,parameters,parameter-passing,managed-bean,Jsf,Parameters,Parameter Passing,Managed Bean,我知道有很多类似的线程,但没有像我这样的线程: 我有一个requestscope bean: @ManagedBean @RequestScoped public class Bean implements Serializable{ private String username = ""; //managed by textbox private String password = ""; //managed by textbox private String id
@ManagedBean
@RequestScoped
public class Bean implements Serializable{
private String username = ""; //managed by textbox
private String password = ""; //managed by textbox
private String id ="-";
//Load the Parameter as usual:
@PostConstruct
public void fetchParams(){
System.out.println("FETCH PARAMS");
FacesContext facesContext = FacesContext.getCurrentInstance();
String id = facesContext.getExternalContext().getRequestParameterMap().get("id");
if(id == null || id.length() == 0) return;
setId(id);
}
// getters & setters
public void doSomething(){ //executed when clicked on the sumbit-button on the jsf-site
StaticFunctions.doSomething(this);
}
}
该守则规定:
它检索get参数“id”并将其保存到String id中(由String.out确认)
但是当执行doSomething()方法并读取之前存储的“id”并返回“-”(就像什么都没有发生一样)。
为什么会这样?您的ManagedBean是
@requestScope
,将在请求结束时销毁。执行doSomething()
时,用户提交表单并启动新请求。
因此,您应该在控制台中看到两次“FETCH PARAMS”,因为创建了两个bean,但是对于第二个请求id
isnull
您可以找到关于四个JSF作用域的详细解释。但是有什么解决我的问题的方法吗?如何正确执行doSomething()?用户名和密码执行正确。。。只有id会产生问题(因为它没有文本字段或任何内容?请选择更大的范围或