JSF Primefaces Bean:如何从SelectOneListBox中删除选定的值?

时间:2012-11-12 10:49:35

标签: java jsf primefaces

我有一个包含一些数据的selectOneListBox。选择一个值并单击REMOVE按钮后,必须删除该值。我需要在我的Bean中执行此操作。我认为问题出在if-Statement或codeValue

我的xhtml:

  <p:selectOneListbox id="list" value="#{codelistBean.codeValue2}"                  style="height:300px;overflow:scroll;margin:1px;width:250px"
    autoUpdate="true">
    <f:selectItems value="#{codelistBean.code2Value}" />
    </p:selectOneListbox>`

我的豆:

变量

String codeValue;

 private static Map<String, Object> codeValue = new LinkedHashMap<String, Object>();

这里我给Map添加了一些值:

codeValue.put(getLabel(), getValue()); 

删除方法

public void removeCode(ActionEvent e) {

        for (Iterator<Map.Entry<String, Object>> it = codeValue.entrySet()
                .iterator(); it.hasNext();) {

            Entry<String, Object> entry2 = it.next();

            if (entry2.getKey().equals(codeValue.get(codeValue2))) {
                it.remove();

            }
        }

    }

最后我将Map返回给JSF以显示它

public Map<String, Object> getCode2Value() {
        return codeValue;
    }

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以定义SelectItem s:

的列表,而不是使用静态HashMap
String codeValue2;
List<SelectItem> codeValue = new ArrayList<SelectItem>();

//getters & setters

它与您的HashMap一样保存键/值对,唯一的区别是值/标签顺序:

codeValue.add(new SelectItem(value,label))

可以简化删除功能:

   public void removeCode(ActionEvent e) {

       SelectItem remove = null;
       for (SelectItem item : codeValue) {
           if (item.getValue().equals(codeValue2)) {
               remove = item;
           }
       }
       codeValue.remove(remove);
    }

请注意,您也可以从方法标题中删除ActionEvent e参数,但这不是必需的。

<p:selectOneListbox id="list" value="#{codelistBean.codeValue2}"
                    style="height:300px;overflow:scroll;margin:1px;width:250px"
                    autoUpdate="true">
    <f:selectItems value="#{codelistBean.codeValue}" />
</p:selectOneListbox>

在您的jsf页面上,f:selectItems value="#{codelistBean.codeValue}"指向List<SelectItem>,而value="#{codelistBean.codeValue2}"代表实际选择。

最后,执行REMOVE按钮后不要忘记更新list

<p:commandButton actionListener="#{codeListBean.removeCode}" 
                 value="REMOVE" update="list"/>