私は次の選択リストを実装しました:
<p:pickList id="pickList" value="#{reportConfiguratorBean.dualListVars}" var="cRVariable" itemValue="#{cRVariable}" itemLabel="#{cRVariable.varName}" converter="#{cRImageTypeConverter}" immediate="true" rendered="true" >
<f:facet name="sourceCaption">Available Variables</f:facet>
<f:facet name="targetCaption">Associated Variables</f:facet>
</p:pickList>
<f:facet name="footer">
<p:commandButton id='varassociate' action="#{reportConfiguratorBean.setAssocImTypVariables()}" value='Associate' process="@this,pickList" />
</f:facet>
選択リストが正しく入力されます(データベースのgetAssocImTypVariables()を使用)。しかし、私の問題は、ユーザーの変更された選択リスト値をキャプチャできず、ソースリストとターゲットリストを変更することです。次のように、commandButtonメソッド「setAssocImTypVariables」を使用して変更をキャプチャしようとしています。
public void setAssocImTypVariables() {
System.out.println(">>>>>>>>>>>>>>> entered");
List<CRVariable> sourceVariables = this.dualListVars.getSource();
List<CRVariable> targetVariables = this.dualListVars.getTarget();
System.out.println(dualListVars.getSource());
System.out.println(dualListVars.getTarget());
for (CRVariable sourceVariable:sourceVariables) {
System.out.println(">>>>>>>>>>>>> I am a source variable: " + sourceVariable.getVarName());
}
for (CRVariable targetVariable:targetVariables) {
System.out.println(">>>>>>>>>>>>> I am a target variable: " + targetVariable.getVarName());
}
}
したがって、たとえば、INITIAL source =(Obj1、Obj2、Obj3、Obj5、Obj7)およびtarget =(Obj4、Obj6)の選択リストがある場合、コンソールで「Obj1」をソースからターゲットに移動します。
---------入力[][]
したがって、dualListVars(ソースとターゲット)は設定されていません!ソースとターゲットの2つの空のリストがあります...
だから私の方法は選択リストの変更を認識できません...何かアイデアはありますか?私はjava+primefacesを初めて使用するので、本当に基本的なものになる可能性があります:(
getAssocImTypesOnLoad()メソッドも添付しています。
public void getAssocImTypesOnLoad() {
Long imTypeId = Long.parseLong(virtualId);
List<CRVariable> source;
List<CRVariable> target;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try
{
tx = session.beginTransaction();
String hq3 = "select distinct v from CRVariable v join v.crimagetypes t where t.id in (:itid)";
Query query3 = session.createQuery(hq3);
query3.setParameter("itid",imTypeId);
target = query3.list();
String hq4 = "select v FROM CRVariable v WHERE v.id not in (" +
"select distinct v1.id " +
"from CRVariable v1 " +
"join v1.crimagetypes t2 " +
"where t2.id in (:itid))";
Query query4 = session.createQuery(hq4);
query4.setParameter("itid",imTypeId);
source = query4.list();
dualListVars = new DualListModel<CRVariable>(source, target);
tx.commit();
}
catch (Exception e)
{
if (tx != null)
{
e.printStackTrace();
}
}
finally
{
session.close();
}
}