gpt4 book ai didi

java - primefaces 如何从选项列表中检索更改的值

转载 作者:行者123 更新时间:2023-12-01 05:00:01 25 4
gpt4 key购买 nike

我已经实现了以下选择列表:

<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());
}
}

因此,如果我有一个初始源 = (Obj1,Obj2,Obj3,Obj5,Obj7) 和目标 = (Obj4,Obj6) 的选项列表,我将“Obj1”从源移动到目标,但在我的控制台中我得到:

---------已输入[][]

所以我的 DualListVars(源和目标)未填充!我有两个空列表用于源和目标...

所以我的方法无法感知选项列表的变化...有什么想法吗?我是 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();
}
}

最佳答案

为什么要在 commandButton 上使用 immediate=true 属性?

如果我没记错的话,根据balusC的一篇文章 check it out here命令按钮上的 immediate=true 应跳过将模型应用于值阶段

也许这就是你的模型没有更新的原因?

(只是通过查看代码进行猜测 - 我没有重现这一点。)

关于java - primefaces 如何从选项列表中检索更改的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com