从同一个jsf更新bean属性

时间:2015-10-30 17:39:01

标签: jsf

我希望通过从这个bean中的方法获取新值来从同一个jsf更新bean属性包含这个bean属性。

这是jsf示例:

<h3>JSF Login Logout</h3>
    <h:outputText value="Username" />
    <h:inputText id="username" value="#{login.user}"></h:inputText>
<h:outputText value="Password" />
    <h:inputSecret id="password" value="#{login.pwd}"></h:inputSecret>
    <h:message for="password"></h:message>
    <br /><br />

    <h:commandButton action="#{login.validateUsernamePassword}"
        value="Login"></h:commandButton>

这是bean方法:

//validate login
public String validateUsernamePassword() {
...
    this.user = "admin";
...

}

我希望返回相同的jsf并用新值填充用户字段。

1 个答案:

答案 0 :(得分:4)

如果您希望保持同一页面,则不必返回String,只需创建void方法即可。如果要在表单提交后更新字段,可以使用带有render属性的ajax在JSF组件中执行此操作,并使用ID或@form之类的选择器指定这些字段:

<h:commandButton action="#{login.validateUsernamePassword}" value="Login">
    <f:ajax execute="formId" render="username otherComponentId"/>
</h:commandButton>

或从支持bean更新:

public String validateUsernamePassword() {
...
    this.user = "admin";
    RequestContext.getCurrentInstance().update("formId:username"); //PrimeFaces solution since you have PrimeFaces tag on your question
...

}

更好的选择是使用render属性,您可能还希望更新h:message以查找发生的错误(提供ID并在render中更新)。