Ank*_*kit 1 jsf primefaces jsf-2 omnifaces
我环顾四周,无法找到解决方案.
我正在使用Omnifaces
listConverter
的PickList
组件Primefaces
.当我将物品从SOURCE移动到TARGET时.在支持bean中,我只获得新项目dualList.getTarget()
.
但是当我将物品从TARGET移动到SOURCE时.在支持bean中,我无法检查是否已从TARGET中删除了某个项目.
我试过dualList.getSource()
- SOURCE不包含从TARGET中删除的项目.
当然,dualList.getTarget()将为空(假设没有项目从SOURCE移动到TARGET).
我的问题是如何才能在支持bean中发现某些内容已从TARGET转移到SOURCE?
以前我已经创建了一个自定义转换器,在那里,我dualList.getTarget()
给了我更新的目标(即旧值+添加的新值+删除旧值).因此,我可以弄清楚哪些值被添加,删除并仍然存在.
但在使用Omnifaces listConverter
时我并不了解如何实现它.
我的代码看起来像这样:
XHTML
<p:pickList id="pickList" value="#{assignBenchmarkersBean.dualUserList}"
var="users" itemLabel="#{users.username}" itemValue="#{users}" >
<o:converter converterId="omnifaces.ListConverter"
list="#{assignBenchmarkersBean.dualUserList.source}" />
</p:pickList>
<p:commandButton id="update" value="#{bundle.create}"
styleClass="redButton bigFont"
actionListener="#{assignBenchmarkersBean.update()}" />
Run Code Online (Sandbox Code Playgroud)
豆
public void update(){
try{
prepareRemoveOldAndAddNewUsersList();
/**some other code **/
}catch(Exception e){
FacesMsg.error(ErrorMessage.UPDATE.getValue(), e);
}
}
private void prepareRemoveOldAndAddNewUsersList() {
for(User user : dualUserList.getTarget()){ //add users
addUsers.add(user);
}
for(User user : dualUserList.getSource()){ //remove users
if(oldUserList.contains(user)){
removeUsers.add(user);
}
}
}
Run Code Online (Sandbox Code Playgroud)
用户实体
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof User)) {
return false;
}
User other = (User) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.abc.model.main.User[ id=" + id + " ]";
}
Run Code Online (Sandbox Code Playgroud)
注意:
如果在转换器的list
属性中,我放bean.dualList.target
,然后整个事情反过来.
ole*_*exd 10
transfer
如PrimeFaces用户指南中所述,最好为此目标使用ajax 事件.
XHTML:
<p:pickList id="pickList" value="#{assignBenchmarkersBean.dualUserList}"
var="users" itemLabel="#{users.username}" itemValue="#{users}" >
<o:converter converterId="omnifaces.ListConverter"
list="#{assignBenchmarkersBean.dualUserList.source}" />
<p:ajax event="transfer" listener="#{pickListBean.handleTransfer}" />
</p:pickList>
Run Code Online (Sandbox Code Playgroud)
豆:
public class PickListBean {
//DualListModel code
public void handleTransfer(TransferEvent event) {
//event.getItems() : List of items transferred
//event.isAdd() : Is transfer from source to target
//event.isRemove() : Is transfer from target to source
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3975 次 |
最近记录: |