1

jsf primefaces で Web アプリケーションを開発しています。dataTable

ここに私のxhtmlコードがあります

<p:contextMenu for="table">
        <p:menuitem value="Allocate" actionListener="#{allocation.allocate}" update="msg"/> 
</p:contextMenu>
<p:dataTable id="table" var="batch" value="#{allocation.batchInfoList}" rowKey="#{batch.id}"  
                 selection="#{allocation.batchInfo}" selectionMode="single">  
        <p:column headerText="Tan">  
            <h:outputText value="#{batch.tan}" />  
        </p:column> 
        <p:column headerText="Username">  
            <h:outputText value="#{batch.users.curator}" />
        </p:column>
        <p:column headerText="Status">  
            <h:outputText value="#{batch.status}" />  
        </p:column> 
 </p:dataTable> 

ここに私のアクションコードがあります

package com.cation.action;

import java.util.ArrayList;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.cation.bean.BatchInfo;
import com.cation.bean.Users;
import com.cation.controller.CationController;

public class Allocation {

    private String batchName;

    private String curator;

    private String tanNumber;

    private List<BatchInfo> batchInfoList;

    private List<String> batchList = new ArrayList<String>();

    private List<Users> usersList = new ArrayList<Users>();

    private BatchInfo batchInfo = new BatchInfo();

    private CationController cationController = new CationController();

    public String getBatchName() {
        return batchName;
    }

    public void setBatchName(String batchName) {
        this.batchName = batchName;
    }

    public List<BatchInfo> getBatchInfoList() {
        return batchInfoList;
    }

    public void setBatchInfoList(List<BatchInfo> batchInfoList) {
        this.batchInfoList = batchInfoList;
    }

    public List<String> getBatchList() {
        return batchList;
    }

    public void setBatchList(List<String> batchList) {
        this.batchList = batchList;
    }

    public List<Users> getUsersList() {
        return usersList;
    }

    public void setUsersList(List<Users> usersList) {
        this.usersList = usersList;
    }

    public String getCurator() {
        return curator;
    }

    public void setCurator(String curator) {
        this.curator = curator;
    }

    public String getTanNumber() {
        return tanNumber;
    }

    public void setTanNumber(String tanNumber) {
        this.tanNumber = tanNumber;
    }

    public BatchInfo getBatchInfo() {
        return batchInfo;
    }

    public void setBatchInfo(BatchInfo batchInfo) {
        this.batchInfo = batchInfo;
    }

    @SuppressWarnings("unchecked")
    public Allocation() {
        try {
            HttpServletRequest request = (HttpServletRequest) FacesContext
                    .getCurrentInstance().getExternalContext().getRequest();
            HttpSession session = request.getSession();
            usersList = (List<Users>) session.getAttribute("allUsers");
            batchList = cationController.getAllBatch();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public String handleBatch() {
        try {
            batchInfoList = new ArrayList<BatchInfo>();
            batchInfoList = cationController.getBatchByName(batchName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "allotInput";
    }

    public void allocate() {
        System.out.println(batchInfo);
    }
}

私の問題は、右クリックイベントでデータテーブルから行の値を選択し、割り当てを選択すると、メソッドが呼び出されますが、オブジェクトが null として返されることです。コードを xhtml の datatable タグに正しく配置したかどうかはわかりません。

誰でもこの問題を解決するのを手伝ってくれますか? 選択した行の値またはそのオブジェクトを取得するだけです。

4

2 に答える 2

0

ajax 呼び出しを使用してみてください。とてもシンプルです。rowSelect イベントの行クリック リスナー メソッドを追加します。

<h:form id="tableForm">
    <p:dataTable id="userTable" var="item" value="#{myMB.batchList}"
                selectionMode="single" rowKey="#{item}" paginator="true" rows="10" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                rowsPerPageTemplate="5,10,15" paginatorPosition="bottom">
        <p:ajax event="rowSelect" listener="#{myMB.rowClickListener}"
                    update="@form" />
                <p:column headerText="Column Field1" >
                    <h:outputText value="#{item.field1}" />
                </p:column>
                <p:column headerText="Column Field2" >
                    <h:outputText value="#{item.field2}" />
                </p:column>
    </p:dataTable>
</h:form>

そしてマネージドBeanに:

public void rowClickListener(SelectEvent event) {
    if (event.getObject() != null) {
        Batch pickedBatch= (Batch) event.getObject();
        // do what you need with your selected batch object
    }
}

それがあなたにとって便利であることを願っています。幸運を!

于 2013-07-08T15:11:05.043 に答える