0

私は新規ユーザーの登録申請に取り組んでいます。1 つのページで、ユーザーは無料期間を選択できます。この目的のために、私は PrimeFaces DataTable - Radiobutton を使用しています。私はPrimeFaces ShowCaseをフォローしています。

ちょっとばかげた質問があるかもしれませんが、選択した行の c_id などのデータを取得するにはどうすればよいですか? 本当に解決できません。たとえば、次の試行は機能しません。

public String selectData() {
        String result = null;
        CollectionTerm selectedTerm = this.termsModel.getRowData();
        System.out.println("Row id: " + selectedTerm.getC_id());
        return result;
    }

それは私にエラーを返します: java.lang.IllegalArgumentException:行は利用できません

2 番目の質問です。選択した行のデータを別のページに表示するにはどうすればよいですか? 私が間違っていること:

<h:form id="test">
    <h:outputText value="Id of selected row: " />  
    <h:outputText value="#{dl.c_id}" />
</h:form>

助けと推薦をありがとう!私はJSFの初心者です。時々、非常に混乱し、適切な答えが見つかりません。

JSF マネージド Bean

@ManagedBean
@SessionScoped
public class Register implements Serializable {

    private static final long serialVersionUID = 1L;

    private UserDetails user;
    private Term term;
    private CollectionTerm collectionTerm;

    private List<CollectionTerm> dataList;
    private CollectionTerm selectedTerm;
    private TermDataModel termsModel;

    public Register() {

        dataList = new ArrayList<CollectionTerm>();
        loadDataList();
        termsModel = new TermDataModel(dataList);

        user = new UserDetails();
        term = new Term();
        collectionTerm = new CollectionTerm();
    }

    // getters and setters

private void loadDataList() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    dataList = session.createQuery("from CollectionTerm").list();
}

}

データ・モデル

import java.util.List;

import javax.faces.model.ListDataModel;

import org.primefaces.model.SelectableDataModel;

import de.ibmt.upb.model.CollectionTerm;

public class TermDataModel extends ListDataModel<CollectionTerm> implements SelectableDataModel<CollectionTerm> {

    public TermDataModel() {    
    }

    public TermDataModel(List<CollectionTerm> data) {
        super(data);
    }

    @Override
    public CollectionTerm getRowData(String rowKey) {

        List<CollectionTerm> dataList = (List<CollectionTerm>) getWrappedData();

        for(CollectionTerm term : dataList) {  
            if(term.getC_id().equals(rowKey))  
                return term;  
        } 

        return null;
    }

    @Override
    public Object getRowKey(CollectionTerm term) {
        return term.getC_id();
    }

}

JSF

<h:form id="collection">
    <p:fieldset legend="Date and time">
        <p:dataTable id="collection" value="#{register.termsModel}" var="dl" selection="#{register.selectedTerm}">
            <p:column selectionMode="single" style="width:2%" /> 
            <p:column>
                #{dl.c_id}
            </p:column>
            <p:column>
                #{dl.dateCollection}
            </p:column>
            <p:column>
                #{dl.timeCollection}
            </p:column>
        </p:dataTable>
        <p:commandButton value="Save" type="submit" action="#{register.selectData()}" ajax="false" />
     </p:fieldset>
</h:form>
4

1 に答える 1