在RemoveAll按钮</p:picklist>之后<p:picklist>没有清除

时间:2013-01-03 06:24:53

标签: jsf jsf-2 primefaces

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

因此,如果项目正在清算且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>

编辑:支持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());
    }

ParamObject .java

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

1 个答案:

答案 0 :(得分:2)

正如@Xtreme Biker在你的支持bean中提到它。

首次提交列表时,将其设置在辅助bean中。第二次打开对话框时,它已经存在。即使您按下RemoveAll,它只会在您的浏览器中删除,但它不适用于支持bean。并且您的提交将无效,因为您已经要求= true。

所以你可以选择以下选项之一:

  1. 删除required = true,每次提交后,您需要按RemoveAll并再次提交空列表(不是选项)。
  2. 在支持bean中执行所有必需的任务后,清除someDialog.selectedItem值,更新并关闭对话框。
  3. 每次打开对话框时都会在支持bean中清除someDialog.selectedItem值。
  4. 我希望它会有所帮助,因为我也是新来的。