4

selectAllチェックボックスをクリックしたときにBeanからJavaメソッドを呼び出す適切な方法は何ですか?

<f:facet name="header">
      <h:selectBooleanCheckbox  binding="#{bean.selectAll}" onclick="highlight(this)" class="checkall"/>
</f:facet>

binding動かない。この Java メソッドでコードを実行したいだけです。

編集

private HashMap<String, Boolean> selected = new HashMap<>();
public void selectAll() throws Exception {

        String SqlStatement = null;

        if (ds == null) {
            throw new SQLException();
        }

        Connection conn = ds.getConnection();
        if (conn == null) {
            throw new SQLException();
        }

        SqlStatement = "SELECT ID FROM ACTIVESESSIONSLOG";

        PreparedStatement ps = null;
        ResultSet resultSet = null;
        int count = 0;

        try {
            conn.setAutoCommit(false);
            boolean committed = false;
            try {
                ps = conn.prepareStatement(SqlStatement);
                resultSet = ps.executeQuery();
                selected.clear();

                while (resultSet.next()) {

                    selected.put(resultSet.getString("ID"), true);
                }
/*
                for (Map.Entry<String, Boolean> entry : selectedIds.entrySet()) {
                    entry.setValue(true);
                }

*/                conn.commit();
                committed = true;
            } finally {
                if (!committed) {
                    conn.rollback();
                }
            }
        } finally {
            ps.close();
            conn.close();
        }
    }
4

1 に答える 1

4

<f:ajax>ajax リクエストの送信に使用します。

<h:selectBooleanCheckbox value="#{bean.selectAll}" onclick="highlight(this)" class="checkall">
    <f:ajax listener="#{bean.onSelectAll}" render="@form" />
</h:selectBooleanCheckbox>

private boolean selectAll;

public void onSelectAll(AjaxBehaviorEvent event) {
    // If you're using a boolean property on the row object.
    for (Item item : list) {
        item.setSelected(selectAll);
    }

    // Or if you're using a Map<Long, Boolean> on item IDs
    for (Entry<Long, Boolean> entry : selected.entrySet()) {
        entry.setValue(selectAll);
    }
}

public boolean isSelectAll() {
    return selectAll;
}

public void setSelectAll(boolean selectAll) {
    this.selectAll = selectAll;
}

理想的には、Bean をビュー スコープに配置して@ViewScoped、同じビューの ajax リクエスト全体でビーンを維持する必要があります。

よほどの理由bindingがない限り、Bean プロパティを使用しないでください。動的なコンポーネント操作を可能にする Bean に全体をバインドすることを目的としていますが、多くの場合、より単純で目立たない方法があります。UIComponent

于 2012-05-24T15:07:02.357 に答える