【问题标题】:Why are fields reset after ajax update with JSF为什么使用 JSF 更新 ajax 后字段会重置
【发布时间】:2017-05-20 22:55:10
【问题描述】:

在表单上:我有一页包含两个选项卡。

Tab 呈现了一些布尔值。 e) 在第一页之后我有命令按钮。是或否(其重置布尔值)

如果我单击是,第二页呈现为真并且页面显示,但所有值都重置。所有数据重置?什么是问题?我该如何解决这个问题。

所有代码都在这里:http://pastebin.com/Ffi33hdw

在 287 号线升级按钮。

    <h:selectOneRadio id="fikirorProje" required="true" value="#{ideaBean.newIdea.fikirProje}"
                                  enabledClass="labelNormalRadio" disabled="#{ideaBean.createdIdea}"
                                  requiredMessage="Bu alan boş bırakılamaz.">
                    <f:selectItem itemValue="#{false}"
                                  itemLabel="Hayır" uptade="butonThree"/>
                    <f:selectItem itemValue="#{true}" itemLabel="Evet"/>
                    <p:ajax event="change" update="addIdeaForm"  />
                    <p:ajaxStatus onstart="PF('status').show()" onsuccess="PF('status').hide()"/>
                </h:selectOneRadio>

感谢回答

【问题讨论】:

  • 在此处显示minimal reproducible example,而不是在某些外部链接中...您的代码中没有任何内容显示您遇到的行为的任何原因。顺便说一句,不推荐使用prependId="false"!在 stackoverflow 中搜索原因

标签: ajax jsf


【解决方案1】:

p:ajaxprocess 属性默认为@this,因此在h:selectOneRadiochange 事件中,您的表单没有被完全处理,这意味着ideaBean 的属性不会被更新,(查看更多有关更新/处理如何工作的信息here)。将process="@form" 添加到您的ajax 事件&lt;p:ajax event="change" update="addIdeaForm process="@form" /&gt;,它应该可以工作

【讨论】:

  • “完全处理,这意味着ideaBean的属性不会被更新” 不是真的,这意味着它们的值(从客户端发送到服务器)不会被服务器端读取并进行处理。这并不意味着引用这些字段的组件应该失去它们的价值。很可能与范围相关
  • @Kukeltje 正如您所说“它们的值(从客户端发送到服务器)不会被服务器端读取和处理”,这不意味着当他更新整个表单时,字段值将是丢了?
  • 不,仅当范围太短时(因此您的答案没有错,它仅在所使用范围的上下文中部分有效)。使用 ajax(和 process="@this 默认值)的优点之一是减少了需要处理的字段数量,因此对于复杂的表单,它需要更少的服务器处理时间。但是您确实需要通过使用更长的范围来保留原始值。我个人经常使用viewAccessScoped from DeltaSpike。比 SessionScoped 短,比 requestScoped 长。
猜你喜欢
  • 2015-09-09
  • 2012-12-17
  • 2021-08-27
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
相关资源
最近更新 更多