<p:datalist>
を使用してから選択したアイテムを追跡しようとしてい<p:selectBooleanButton>
ます。リストをレンダリングするために以下のスニペットを使用しています。
<p:dataList value="#{movies.lazyModel}" var="movie" id="movies" paginator="true" rows="10"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
type="none" paginatorAlwaysVisible="false" lazy="true" rowIndexVar="currentRow" >
<p:panel id="movieInfo">
<!-- content markup -->
<div id="rent">
<p:selectBooleanButton offLabel="Add to Cart" onLabel="Remove from Cart" id="btnRent"
value="#{movies.checkedItems[currentRow]}">
<p:ajax update="btnRent" listener="#{movies.updateCart()}" event="click" process="btnRent"/>
</p:selectBooleanButton>
</div>
</p:panel>
</p:dataList>
バッキングビーン
@ManagedBean(name = "movies")
@ViewScoped
public class MovieListBean extends BaseBean implements Serializable
{
private static final long serialVersionUID = -1887386711644123475L;
....
private boolean[] checkedItems;
@PostConstruct
public void initialize()
{
int totalRows = serviceLocator.getMovieService().getCatalogSize();
checkedItems = new boolean[totalRows];
}
....
public void updateCart()
{
if (lazyModel != null)
{
int selectedIndex = lazyModel.getRowIndex();
System.out.println("Selected row in datalist - " + selectedIndex);
System.out.println("Object instance associated with selected row - " + lazyModel.getRowData());
System.out.println("checkedItems[" + selectedIndex + "] - " + checkedItems[selectedIndex]);
}
}
public boolean[] getCheckedItems() {
return checkedItems;
}
public void setCheckedItems(boolean[] checkedItems) {
this.checkedItems = checkedItems;
}
}
SO に関するソリューションと、使用して同じことを示すドキュメントを見てきましたが、それには、commandButton または commandLink<f:setPropertyActionListener>
を使用する必要があります。ActionSource
また、それらのほとんどは 用<p:dataTable>
です。
コレクションからオブジェクトを追加/削除し、ヘッダー テキストのカウントを更新する必要があるため、これは私の例には当てはまりません。これはリスナーで実現できますが、トリガーされないようです。
したがって、私の質問は、dataList を使用しながらアプローチを変更するにはどうすればよいかということです。上記のスニペットを使用すると、ページネーションも壊れます。
JSF 2.1 (Mojarra) + PrimeFaces 3.5 を使用しています