我有一个包含一些数据的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;
}
感谢您的帮助!
答案 0 :(得分:0)
您可以定义SelectItem
s:
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"/>