这是简单bean的代码:
@ManagedBean(name="helper",eager=true)public class HealthPlanHelper { String random = "1"; public voID setRandomize(String s){ random = s; System.out.println("Calling setter"); } public String getRandomize(){ return random; }}
和Jsf页面:
<HTML xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/Jsf/HTML" xmlns:f="http://java.sun.com/Jsf/core"><h:head></h:head><h:body> <h:form> <h:commandbutton action="nothing"> <f:AJAX render="num"/> </h:commandbutton> <h:inputText value="#{helper.randomize}" ID="num"/> </h:form></h:body></HTML>
如您所见,这是一个请求范围的bean,每当我单击按钮时,服务器显示它创建了bean的实例,但是从不调用setter方法,因此,getter总是返回“1”作为值的串.
当我删除时,正常调用setter.
解决方法 < f:AJAX>默认情况下,只处理当前组件( read description ofexecute
attribute).基本上,您的代码与此完全相同: <h:form> <h:commandbutton action="nothing"> <f:AJAX execute="@this" render="num"/> </h:commandbutton> <h:inputText value="#{helper.randomize}" ID="num"/></h:form>
在效果中,只有< h:commandbutton动作>已处理并且< h:inputText值> (以及任何其他输入字段,如果有的话)被完全忽略.
您需要更改execute属性以显式指定在AJAX请求期间要处理的组件或部分.通常,为了处理整个表单,使用了@form:
<h:form> <h:commandbutton action="nothing"> <f:AJAX execute="@form" render="num"/> </h:commandbutton> <h:inputText value="#{helper.randomize}" ID="num"/></h:form>
也可以看看:
> Communication in JSF 2.0 – Ajax (asynchronous) POST form
> commandButton/commandLink/ajax action/listener method not invoked or input value not updated(第8点)
> Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes
以上是内存溢出为你收集整理的添加到时,提交的表单值未在模型中更新全部内容,希望文章能够帮你解决添加到时,提交的表单值未在模型中更新所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)