我们有这个ui:重复:
<ui:repeat value="#{notAssigned}" var="pair">
#{pair.data.processName}<br/>
<s:button value="assign" action="#{mypage.assign}">
<f:param name="taskId" value="#{pair.task.id}"/>
</s:button>
</ui:repeat>
现在我可以分配一个和一个元素但按下分配按钮。但我想重构一下并添加一个复选框,以便您可以选择要分配的所有内容,然后按一个将分配所有内容的按钮。
如何修改此代码以支持包含checkbox
(长整数)和一个要提交的按钮的taskId
。
更新
我尝试更改代码以使用<h:selectManyCheckbox>
<h:selectManyCheckbox value="#{mypage.notAssignedTaskIds}">
<f:selectItem itemValue="#{pair.task.id}" itemLabel="#{messages['choose']}" />
</h:selectManyCheckbox>
#{pair.data.processName}
<h:commandButton action="#{mypage.test}" value="Assign"/>
在我的豆子里:
@Setter @Getter
List<String> notAssignedTaskIds = new ArrayList<String>();
public void test() {
log.info("Inside test, size of list #0", notAssignedTaskIds.size());
for(String id : notAssignedTaskIds) {
log.info("TaskId's chosen #0", id);
}
}
但notAssignedTaskids总是空的
答案 0 :(得分:1)
我的建议是,在pair对象中创建一个布尔标志。然后
<a:region>
<ui:repeat value="#{notAssigned}" var="pair">
<h:selectBooleanCheckbox value="#{pair.booleanFlag}">
#{pair.data.processName}
</ui:repeat>
<a:commandLink action="#{yourBean.assignAll()}" value="assignAll">
</a:commandLink>
</a:region>
在你的bean中,遍历notAssigned列表。
public void assignAll() {
.
.
.
for (Pair pair : notAssigned) {
if (pair.booleanFlag) {
mypage.assign(pair);
}
}
}
修改你的assign方法以获得一个对象。顺便说一句,你可以在没有ajax支持的情况下完成它。只需删除 区域并将a:commandLink转换为h:commandLink。
答案 1 :(得分:1)
如果您不想更改模型,请在您的bean中添加Map<Long, Boolean>
。
private Map<Long, Boolean> selectedIds = new HashMap<Long, Boolean>();
将任务ID作为密钥绑定到<h:selectBooleanCheckbox>
值。
<ui:repeat value="#{bean.notAssigned}" var="pair">
<h:selectBooleanCheckbok value="#{bean.selectedIds[pair.task.id]}" />
#{pair.data.processName}
</ui:repeat>
<s:button value="assign" action="#{bean.assign}" />
以assign()
方法收集选定的值。
List<Pair> selectedPairs = new ArrayList<Pair>();
for (Pair pair : notAssigned) {
if (selectedIds.get(pair.getTask().getId())) {
selectedPairs.add(pair);
}
}
答案 2 :(得分:0)
我估计你想要一个h:selectManyCheckbox元素。查看文档here。