2010-12-23 24 views
1

多個值我們有這樣的UI:重複:Seam和JSF:如何發佈的,而不是單一的

<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> 

現在我可以指派一個又一個元素,但按下指定按鈕。但我想重構它並添加一個複選框,以便您可以選擇想要分配的所有內容,然後按一個將分配所有內容的按鈕。

如何修改此代碼以支持包含taskId(這是一個長整數)和一個要提交的按鈕的checkbox

UPDATE

我試圖改變的代碼使用<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總是空

回答

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方法來獲得pair對象。順便說一下,你可以不用Ajax支持。只需刪除 區域並將您的a:commandLink轉換爲h:commandLink。

+0

嗨。這當然是有道理的,但我想以另一種方式來做,而不是這個「破解」 – 2010-12-23 11:34:05

0

我想你要一個h:selectManyCheckbox元素。查看文檔here

1

如果您不想更改模型,請在您的bean中添加Map<Long, Boolean>

private Map<Long, Boolean> selectedIds = new HashMap<Long, Boolean>(); 

將其綁定到<h:selectBooleanCheckbox>值與任務ID爲關鍵。

<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); 
    } 
}  
相關問題