0

我遇到了一个奇怪的问题<p:pickList>。当我打开一个包含此 pickList 的对话框并使用 RemoveAll 按钮清除目标列表中的所有项目并使用目标列表中<p:commandButton>的旧项目提交时,仍然会出现。我已经给出required=true了pickList 的属性。奇怪的行为是当我提交它时,会出现一个工具提示,说该字段是强制性的。

那么,如果项目正在清除并且required属性工作正常,为什么旧​​项目会重新出现?解决方案是什么?

<p:pickList id="selectedId" value="#{someDialog.selectedItem}"
            var="item" itemValue="#{item}" required="true"
            converter="pickListConverter" requiredMessage="#{msg.required_message}" 
            styleClass="#{component.valid ? '': 'ui-state-error'}">
        </p:pickList>

编辑: Backing Bean - 我只发布相关方法。 SomeDialog.java

 private DualListModel<Item> selectedItem = new DualListModel<Item>();
 //Its getters and setters

public final void afterSave(final ParamObject pObject) {
        pObject.getRelevantData().clear();
        pObject.getRelevantData().addAll(selectedItem.getTarget());
    }

参数对象.java

private List<Item> relevantData = new ArrayList<Item>();
//Setters and Getters
4

1 回答 1

2

正如@Xtreme Biker 在您的支持bean 中提到的那样。

当您第一次提交列表时,您将其设置在 backing bean 中。第二次打开对话框时,它已经存在了。即使您按 RemoveAll,它也只会在您的浏览器中删除,它不适用于 backing bean。而且您的提交将不起作用,因为您已要求= true。

因此,您可以选择以下选项之一:

  1. remove required=true 每次提交后,您需要按 RemoveAll 并再次提交空列表(它不是一个选项)。
  2. 在 backing bean 中完成所有必需的任务后,清除 someDialog.selectedItem 值,更新并关闭对话框。
  3. 每次打开对话框时都会清除 backing bean 中的 someDialog.selectedItem 值。

我希望它会有所帮助,因为我也是新来的。

于 2013-01-03T08:14:24.180 回答