私は新規ユーザーの登録申請に取り組んでいます。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>