【问题标题】:Edited value not reflected in managed bean未反映在托管 bean 中的编辑值
【发布时间】:2015-07-06 12:57:08
【问题描述】:

我正在尝试编辑填充在 jsf 数据表中的值(比如名称)。 jsf编辑值形式的sn-p如下。

<h:column>
<f:facet name="header">
<h:outputLabel value="Name"></h:outputLabel>
</f:facet>
<h:inputText 
value="#{maintenancedisplay.carrierMaintenanceResult.name}" > 
</h:inputText>
</h:column>

<a4j:region>
<a4j:commandButton value="Save"
onclick="#{rich:component('ajexLoad')}.show();"
oncomplete="#{rich:component('ajexLoad')}.hide();"
title="Save Details"
action="#{maintenancedisplay.saveChanges}"
reRender="growlGrp,modelpanelGroup1" immediate="true">
</a4j:commandButton>
</a4j:region>

但是在点击save 按钮时,旧值将返回到托管 bean,而不是编辑后的值。

我尝试如下添加binding attribute。但是还是不行。

<h:column>
<f:facet name="header">
<h:outputLabel value="name"></h:outputLabel>
</f:facet>
<h:inputText 
value="#{maintenancedisplay.carrierMaintenanceResult.name}" binding="#{maintenancedisplay.name}"> 
</h:inputText>
</h:column>

添加绑定属性后,修改setter方法如下:

public void setname(HtmlInputText  name) {
        this.name = name;
        System.out.println("name:" + name.getValue());
    }

在控制台日志中,我得到的是旧值而不是更新值。

请指出我在这里犯的错误。

感谢您的建议!

【问题讨论】:

  • binding 从来都不是这类问题的有效解决方案。摆脱它。至于您的具体问题,您究竟为什么使用immediate="true"?您使用的是 JSF 1.x 左右吗?
  • @BalusC 它的 Jsf 1.2。这是我使用的默认属性值。如果我错了,请纠正我
  • 为什么要指定immediate 属性?如果您不知道原因,请将其删除。
  • @BalusC 尝试删除immediate 属性。但同样的问题也存在。
  • 好。现在可以将其排除在可能的原因之外。下一步是&lt;a4j:region&gt;。你觉得它到底是做什么的?

标签: jsf richfaces managed-bean ajax4jsf


【解决方案1】:

当从 jsf 中删除 &lt;a4j:commandButton&gt; 周围的附加 &lt;a4j:region&gt; 标签后,问题中提到的问题就解决了。

更新后的sn-p是

<a4j:commandButton value="Save"
onclick="#{rich:component('ajexLoad')}.show();"
oncomplete="#{rich:component('ajexLoad')}.hide();"
title="Save Details"
action="#{maintenancedisplay.saveChanges}"
reRender="growlGrp,modelpanelGroup1" >
</a4j:commandButton>

感谢 BalusC 的见解和建议。

【讨论】:

    猜你喜欢
    • 2018-06-18
    • 2023-04-03
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    相关资源
    最近更新 更多