Primefaces Datatableで行を選択する際に問題があります。私は動的な列を使用するので、標準の行選択メカニズムはここでは使用できません。自分でチェックボックスの選択を実装します。jsfデータテーブル行の選択問題
<h:form>
<p:dataTable id="table"
var="result"
value="#{tableBean.results}">
<p:columns value="#{tableBean.columnNames}" var="column" columnIndexVar="colIndex">
<f:facet name="header">
#{column}
</f:facet>
<h:panelGroup rendered="#{colIndex==0}">
<h:outputLabel>#{rowIndex}</h:outputLabel>
<h:selectBooleanCheckbox value="#{tableBean.selectedRows[result[0]]}"/>
</h:panelGroup>
</p:columns>
</p:dataTable>
<h:commandButton value="Submit"></h:commandButton>
</h:form>
そして、ここでは、私がチェックボックスを選択し、マネージドBeanに持っているものです::
package testpackage;
import java.util.*;
import javax.faces.bean.*;
@ManagedBean
@SessionScoped
public class TableBean
{
private Map<String, Boolean> selectedRows = new HashMap<String, Boolean>();
List<List<String>> results = new LinkedList<List<String>>();
public TableBean()
{
List<String> row1 = new LinkedList<String>();
List<String> row2 = new LinkedList<String>();
row1.add("row1.ref");
row1.add("row1.id");
row1.add("row1.status");
row2.add("row2.ref");
row2.add("row2.id");
row2.add("row2.status");
results.add(row1);
results.add(row2);
//selectedRows.put("row2.ref", true);
}
public Map<String, Boolean> getSelectedRows()
{
return selectedRows;
}
public String submit()
{
List<List<String>> selectedResults = new ArrayList<List<String>>();
for (List<String> result : results)
{
if (selectedRows.get(result.get(0)) != null)
{
selectedResults.add(result);
selectedRows.remove(result.get(0));
}
}
return null;
}
public List<List<String>> getResults()
{
return results;
}
public List<String> getColumnNames()
{
List<String> columnNames = new LinkedList<String>();
columnNames.add("");
columnNames.add("REF");
columnNames.add("ID");
columnNames.add("STATUS");
return columnNames;
}
}
getSelectedRows方法支援するため
、ここで私は私のXHTMLで持っているものの簡易版がsです素晴らしいですが、問題は、setSelectedRowsメソッドが呼び出されないため、ユーザーが選択したチェックボックスがわからないことです。おそらく私は何か非常に些細なことを見落としているかもしれませんが、解決策を見つけることはできません。
これに関するご意見はありますか?私が助けてくださった場合、あるいは動的列のための他の行選択ソリューションを提供していただければ幸いです。事前に
Thxを、 レヴィ
「私はあなたのソリューションを試してみましたが、selectedRowsはまだdoesnの関数が呼び出されるまでに新しい値でいっぱいになります。選択したチェックボックスにはいつ時間がかかりますか? – Levi
更新中のモデル値フェーズです。あなたは 'getSelectedRows()'がうまくいくとあなたは言った。確実にするには、アクションメソッドの前に*呼び出されていますか? ( 'submit()'メソッド)。 – BalusC
はい、getSelectedRows()は呼び出されますが、setSelectedRows()は呼び出されないため、selectedRows Mapは塗りつぶされません。 – Levi