Jsf <;p:挑选名单>;移除所有按钮后未清除

Jsf <;p:挑选名单>;移除所有按钮后未清除,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我在中遇到了一个奇怪的问题。当我打开一个包含此选取列表的对话框,并使用RemoveAll按钮清除目标列表中的所有项目,然后使用提交时,目标列表中的旧项目仍会出现。我已经为pickList提供了属性required=true。奇怪的是,当我提交它时,会出现一个工具提示,说明该字段是必需的 因此,如果项目正在清除并且required属性工作正常,那么为什么会重新出现旧项目?解决这个问题的办法是什么 <p:pickList id="selectedId" value="#{someDialog.

我在
中遇到了一个奇怪的问题。当我打开一个包含此选取列表的对话框,并使用RemoveAll按钮清除目标列表中的所有项目,然后使用
提交时,目标列表中的旧项目仍会出现。我已经为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());
    }
private List<Item> relevantData = new ArrayList<Item>();
//Setters and Getters
private DualListModel selectedItem=new DualListModel();
//它的接受者和接受者
公共最终void afterSave(最终参数对象pObject){
POObject.getRelevantData().clear();
pObject.getRelevantData().addAll(selectedItem.getTarget());
}
ParamObject.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());
    }
private List<Item> relevantData = new ArrayList<Item>();
//Setters and Getters
private List relevantData=new ArrayList();
//二传手和接球手

正如@Xtreme Biker在你的背景中提到的那样

当您第一次提交列表时,在backingbean中设置它。第二次打开对话框时,它已经在那里了。即使您按下RemoveAll,它也只会在浏览器中删除,不能与支持bean一起使用。您的提交将不起作用,因为您已要求=true

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

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

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

    你能编写你的支持bean代码吗?我仍然看不出问题所在。您正试图提交一个表单,该表单包含一个必需的选择列表和一个空的目标列表。显然,如果它是必需的,您就不能提交它,jsf正在请求一个必填字段。您必须在目标列表中至少放置一个项目,或者使其成为非必需项。旧项目仍然出现,因为表单的事实没有发送出去。@XtremeBiker-让我澄清一下。在我提交表格之前,旧的项目出现了,这很好。但是,当我单击RemoveAll按钮并提交表单时,旧项目会重新出现。理想情况下,当我这样做时,由于
    required
    属性,它不应该允许我提交表单。它正在这样做并显示旧项目。这让我很困惑。@XtremeBiker-我的意思是,即使我清除了旧项目,它们也会重新出现在目标列表中。对不起,如果我搞糊涂了。你能发布整个表单吗?很明显,我的支持bean正在从选择列表中删除项目。我通过删除
    required=true
    并打印列表的内容来检查它,该列表在RemoveAll之后为空。那么,问题出在哪里呢?把你的后盾放在这里