JSF 2属性不反映ajax操作后的更改



情况如下:

我有一个弹出框来选择列出的项目之一(单击showParentAssetSearchButton)。一旦选定,所选项目的值将显示在主屏幕上。在主屏幕中,将有一个按钮来清除所选择的项目。它将触发一个ajax操作来清除受管bean的绑定值(通过点击clearParentAssetButton)。

当我进行调试时,该值是清晰的,不会显示在主屏幕上。然而,当我点击保存按钮时,我注意到应该为空的属性实际上并不是空的。它仍然保持原来的值

以下是UI代码片段:
<h:panelGroup id="myregion">
    <p:inputText id="parentAsset" 
                 ondblclick="parentAssetDlg.show()"
                 value="#{assetMasterCreatePage.parentAsset.shortName}"
                 rendered="#{not empty assetMasterCreatePage.parentAsset}"/>
</h:panelGroup>
<p:commandButton icon="ui-icon-search" 
                 id="showParentAssetSearchButton" 
                 type="button"
                 title="#{msg.label_asset_search_parent_asset}"
                 onclick="parentAssetDlg.show()" />
<p:commandButton icon="ui-icon-trash" 
                 id="clearParentAssetButton" 
                 title="#{msg.label_asset_clear_parent_asset}"
                 actionListener="#{assetMasterCreatePage.doResetParentAsset}"
                 immediate="true"
                 process="@form"
                 update="clearParentAssetButton, myregion"
                 disabled="#{empty assetMasterCreatePage.parentAsset}" />
 ........
 <p:commandButton value="#{msg.button_save}" icon="ui-icon-disk" 
                  action="#{assetMasterCreatePage.doSaveAsset}" />

这是托管bean片段

@ManagedBean(name="assetMasterCreatePage")
@ViewScoped
public class AssetMasterCreatePage extends DefaultAssetMasterPage {
      private AssetMaster assetMaster;
      private AssetMaster parentAsset;
..........
.........
  public void doResetParentAsset(){
     parentAsset = null;
  }
  public String doSaveAssetMaster(){
    assetMaster.setParentAsset(parentAsset);
    assetMasterService.save(assetMaster);
    MessageUtils.saveSuccessMessage();
    return "save";
  }
}

正如你所看到的,当clearParentAssetButton的按钮被点击时,它将触发ajax动作#{assetMasterCreatePage。doResetParentAsset}来重置parentAsset的值。这里的问题是在保存时,本来应该为空的parentAsset没有为空。

我使用JSF 2来执行任务。

奇怪,还有其他字段保存parentAsset的值吗,我的意思是在页面中,有一些字段,比如<h:inputText value="parentAsset.shortName"/>,当你点击保存按钮时,一个新的parentAsset被初始化并保存,你也可以调试它,看看parentAsset的哈希码是否相同。

相关内容

  • 没有找到相关文章

最新更新