2

複数のチェックボックスを選択し、Bean の値を取得するために、このリンクhttp://balusc.blogspot.com/2006/06/using-datatables.htmlをたどっています。

私のjsfコードは以下の通りです:

<p:dataTable value="#{deviceController.devicesModel}"
            var="item" widgetVar="deviceTable"
            selection="#{deviceController.selectedDevices}"
            rowKey='#{item}'>
    <p:column  sortBy="#{item.manufacturerSerialNum}" filterBy="#{item.manufacturerSerialNum}">
        <f:facet name="header">
            <h:outputText value="Manufacturer Serial No"/>
        </f:facet>
        <h:outputText value="#{item.manufacturerSerialNum}" />  
    </p:column>             
    <p:column selectionMode="multiple">
        <f:facet name="header">
            <h:outputText value="#{bundle.ListLaptopTitle_inService}"/>
        </f:facet>
        <h:selectBooleanCheckbox value="#{item.isInService}"/>
    </p:column>
</p:dataTable> 

<p:commandButton action="#{deviceController.getSelectedItems}" 
        value="Submit Request" style="margin-top: 20px"/>

私のビーンコードは次のとおりです。

public String getSelectedItems(){
        selectedDevicesList = new ArrayList<Device>();
        List<Device> dev=createDeviceList();
        for (Device item :dev ) {
            if (item.getIsInService()) {
                selectedDevicesList.add(item);
                item.setIsInService(false); // Reset.
            }
    }
        return "selected";
    }

私が理解していないのは、テーブルから選択した行の値をどこに渡すかです。最初に、4 つの行があり、2 つの行をチェックしたときにすべてのチェック ボックスがオフになっている場合、Bean に移動し、これらの 2 つの値をデータベースで更新する必要があります。これら 2 つの Beanのフィールドの値をinservice自分の Bean で true として取得する必要があるように、不足しているものを教えてください。ありがとうございます。

4

1 に答える 1

3

基本的に、POSTリクエストとGETを混在させています。<p:commandButton />のメソッドは、 Beanactionに既に格納されているものを取得し、それをコントローラー層に送信するだけで済みます。

それとは別に、他のエラーは、Primefaces がチェック選択列を独自に管理し、それを実行するために手動で注入し<h:selectBooleanCheckbox />ているということです。

最後の列を で置き換える<p:column selectionMode="multiple" style="width:2%" />と、選択内容を に保存する作業が行われ#{deviceController.selectedDevices}ます。

必要な機能を提供するこの単純なSSCCEを確認してください。

マネージド Bean

@ManagedBean
@ViewScoped
public final class TestManagedBean implements Serializable {

    public class Test {
        private int id;
        private String description;
        private boolean selected;

        public Test(int id, String desc) {
            this.id = id;
            this.description = desc;
        }

        public String getDescription() {
            return description;
        }

        public int getId() {
            return id;
        }

        public boolean isSelected() {
            return selected;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public void setId(int id) {
            this.id = id;
        }

        public void setSelected(boolean selected) {
            this.selected = selected;
        }

        @Override
        public String toString() {
            return "Test [description=" + description + ", selected="
                    + selected + "]";
        }
    }
    private List<Test> list;

    private List<Test> selectedValues;

    public TestManagedBean() {
    }

    public void actionSave() {
        //Perform DB stuff with selectedValues
        System.out.println("Table saved");
    }

    public List<Test> getList() {
        return list;
    }

    public List<Test> getSelectedValues() {
        return selectedValues;
    }

    @PostConstruct
    public void init() {
        list = Arrays.asList(new Test(1, "Tanzania"), new Test(2, "India"));
    }
}

xhtml ページ

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">
<h:head>
    <title>Test page</title>
</h:head>
<h:body>
    <h:form>
        <p:dataTable value="#{testManagedBean.list}"
            selection="#{testManagedBean.selectedValues}" var="value"
            rowKey="#{value.id}">
            <p:column>
                #{value.description}
            </p:column>
            <p:column selectionMode="multiple" style="width:2%" />
        </p:dataTable>
        <h:commandButton value="send" action="#{testManagedBean.actionSave}" />
    </h:form>
</h:body>
</html>
于 2013-09-28T15:55:13.727 に答える