我知道有许多类似的线程,但不像我的:
我有一个requestcope bean:
@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-parameter" id"并将其保存到String id中(由string.out ....确认)。
但是当执行方法doSomething()并且之前存储的" id"被阅读并返回" - " (没有发生任何事情)。
为什么会这样?
答案 0 :(得分:2)
您的ManagedBean是@RequestScoped
,将在请求结束时销毁。执行doSomething()
时,用户提交了表单并启动了新请求。
所以你应该在控制台中看到两次“FETCH PARAMS”,因为创建了两个Beans但是第二个请求id
是null
。
您可以找到有关四个JSF-Scopes here的详细说明。