我希望通过从这个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并用新值填充用户字段。
答案 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
中更新)。