我正在使用丰富的面孔在Seam中尝试一件简单的事情。我正在显示来自其他来源的复选框列表,例如Ldap(组或角色),我想将已检查的复选框保存到我自己的表中,我称之为配置文件。
现在我不擅长此事,我提前道歉。我正在使用一个动作从getLdapOrgs方法中的ldap加载配置文件,它返回一个NGBProfiles列表,检查的那些应该被转移到相同动作的selectedNgbs。 selectedNgbs也是List的相同类型。该动作实现了ValueChangeListener,所以我有一个processValueChange方法覆盖,它现在没有做多少cos它永远不会在正确的时间被调用。
这是怎么回事:我加载页面,当我选中一个复选框时,页面会重新加载。检查消失了。永远不会调用保存按钮..还不是valuchangelistner ???唯一被调用的方法是getChosenNgbs方法。并且getLdapOrgs方法正确地从ldap加载角色。
我的动作类看起来像这样:
public void processValueChange(ValueChangeEvent arg0)
throws AbortProcessingException {
// TODO Auto-generated method stub
System.out.println("in alue chaneg listener");
if (getChosenNgbs() != null) {
System.out.println(getChosenNgbs().size());
}
}
public void setChosenNgbs(List<NotifyingBodyProfile> chosenNgbs) {
this.chosenNgbs = chosenNgbs;
for(NotifyingBodyProfile chosenNgb : chosenNgbs){
entityManager.persist(chosenNgb);
}
}
public List<NotifyingBodyProfile> getChosenNgbs() {
return chosenNgbs;
}
public List<NotifyingBodyProfile> getLdapOrgs(){
//从ldap获取数据 }
public List<NotifyingBodyProfile> getchosenNgbsfromDB(){
List<NotifyingBodyProfile> chosenNgbsList= entityManager.createQuery("from NotifyingBodyProfile").getResultList();
return chosenNgbsList;
}
public void save(){
System.out.print("size of chosen Ngbs on save" + this.chosenNgbs.size());
}
xhtml也非常直接。 (对不起格式化,代码块在某种程度上不起作用。以前它确实有效......但现在不行。我无法做到)
h:selectManyCheckbox title =“选择您要查看的NGB类型” layout =“pageDirection”value =“#{ngbProfileAction.chosenNgbs}”id =“selectBoxContainer”&gt; valueChangeListener =“#{ngbProfileAction.processValueChange}”&gt; 标签= “#ngbProfile.name}”/&GT;
a:support event =“onclick”reRender =“selectBoxContainer”/&gt;
/小时:selectManyCheckbox&GT;
h:commandButton value =“Save”action =“#{ngbProfileAction.save}”/&gt;
答案 0 :(得分:0)
您是否尝试将ajaxSingle =“true”添加到:support?
同样使用Checkboxes我通常使用“onchange”事件
HTH