JSF请求范围与get参数

时间:2013-08-23 16:15:35

标签: jsf parameters parameter-passing managed-bean

我知道有许多类似的线程,但不像我的:

我有一个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"被阅读并返回" - " (没有发生任何事情)。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

您的ManagedBean是@RequestScoped,将在请求结束时销毁。执行doSomething()时,用户提交了表单并启动了新请求。 所以你应该在控制台中看到两次“FETCH PARAMS”,因为创建了两个Beans但是第二个请求idnull

您可以找到有关四个JSF-Scopes here的详细说明。