Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java f:datatable中的setpropertyactionlistener始终返回最后一个对象_Java_Jsf_Jsf 2_Primefaces - Fatal编程技术网

Java f:datatable中的setpropertyactionlistener始终返回最后一个对象

Java f:datatable中的setpropertyactionlistener始终返回最后一个对象,java,jsf,jsf-2,primefaces,Java,Jsf,Jsf 2,Primefaces,f:setpropertyactionlistener在datatable中不会给我当前行,而是总是给我最后一个对象。。 请帮忙。谢谢 <p:dataTable id="datatableid" value="#{updateSiteObj.emsList}" var="pickListObjEMS" > <p:column headerText="EMS"> <p:pickList id="pojoPickListEMSID" value="#{pickLis

f:setpropertyactionlistener在datatable中不会给我当前行,而是总是给我最后一个对象。。 请帮忙。谢谢

<p:dataTable id="datatableid"  value="#{updateSiteObj.emsList}" var="pickListObjEMS" >
<p:column headerText="EMS"> 
<p:pickList id="pojoPickListEMSID" value="#{pickListObjEMS.serverList}" var="ems"
itemValue="#{ems}" itemLabel="#{ems}" style="border-color: white!important" onTransfer="ajaxSubmit1()">  
<f:facet name="sourceCaption">Available</f:facet>  
<f:facet name="targetCaption">To be removed</f:facet>  
</p:pickList>
<p:remoteCommand action="# {updateSiteObj.onEMSTransfer}" name="ajaxSubmit1" >
<f:setPropertyActionListener value="# {pickListObjEMS}" target="#{updateSiteObj.tempObj}"/>
</p:remoteCommand> 
</p:column>                                     
</p:dataTable>
code.xhtml

<p:dataTable id="datatableid"  value="#{updateSiteObj.emsList}" var="pickListObjEMS" >
<p:column headerText="EMS"> 
<p:pickList id="pojoPickListEMSID" value="#{pickListObjEMS.serverList}" var="ems"
itemValue="#{ems}" itemLabel="#{ems}" style="border-color: white!important" onTransfer="ajaxSubmit1()">  
<f:facet name="sourceCaption">Available</f:facet>  
<f:facet name="targetCaption">To be removed</f:facet>  
</p:pickList>
<p:remoteCommand action="# {updateSiteObj.onEMSTransfer}" name="ajaxSubmit1" >
<f:setPropertyActionListener value="# {pickListObjEMS}" target="#{updateSiteObj.tempObj}"/>
</p:remoteCommand> 
</p:column>                                     
</p:dataTable>

可用
删除
java

<p:dataTable id="datatableid"  value="#{updateSiteObj.emsList}" var="pickListObjEMS" >
<p:column headerText="EMS"> 
<p:pickList id="pojoPickListEMSID" value="#{pickListObjEMS.serverList}" var="ems"
itemValue="#{ems}" itemLabel="#{ems}" style="border-color: white!important" onTransfer="ajaxSubmit1()">  
<f:facet name="sourceCaption">Available</f:facet>  
<f:facet name="targetCaption">To be removed</f:facet>  
</p:pickList>
<p:remoteCommand action="# {updateSiteObj.onEMSTransfer}" name="ajaxSubmit1" >
<f:setPropertyActionListener value="# {pickListObjEMS}" target="#{updateSiteObj.tempObj}"/>
</p:remoteCommand> 
</p:column>                                     
</p:dataTable>
 public class UpdateSite {

/** Creates a new instance of UpdateSite */

private List<List<String>> tempEMSList = new ArrayList<List<String>>();

private List<serverList> emsList = new ArrayList<serverList>();

private serverList tempObj = new serverList();

public String updateSiteDetails() {
List<String> source = new ArrayList<String>();
            List<String> target = new ArrayList<String>();
            for (String[] str : sg.getEMSDetailsList()) {
                source.add(str[0]);

            }

            DualListModel<String> tempSource = new DualListModel<String>(source, target);
            serverList obj = new serverList();
            obj.setServerList(tempSource);
//here i am adding two objects
            emsList.add(emsobj);
}
public void onEMSTransfer() {

    System.out.print("tempOBJ size:" + tempObj.getServerList().getSource().size() + "=>" + tempObj.getServerList().getTarget().size());

}
公共类更新站点{
/**创建UpdateSite的新实例*/
私有列表tempEMSList=newarraylist();
私有列表emsList=new ArrayList();
private serverList tempObj=new serverList();
公共字符串updatestedetails(){
列表源=新的ArrayList();
列表目标=新的ArrayList();
对于(字符串[]str:sg.getEMSDetailsList()){
source.add(str[0]);
}
DualListModel tempSource=新的DualListModel(源、目标);
serverList obj=新的serverList();
对象设置服务器列表(临时源);
//这里我添加了两个对象
emsList.add(emsobj);
}
公共无效onEMSTransfer(){
System.out.print(“tempOBJ size:+tempOBJ.getServerList().getSource().size()+”=>“+tempOBJ.getServerList().getTarget().size());
}
serverList是一个具有数据类型DualListModel变量的类。在onEMSTransfer中,我看到第二个对象正在显示,即使我在picklist中操作第一个对象。

在全局范围内对给定的
名称生成JavaScript函数(右键单击页面并查看源代码以亲眼看到):

<p:dataTable id="datatableid"  value="#{updateSiteObj.emsList}" var="pickListObjEMS" >
<p:column headerText="EMS"> 
<p:pickList id="pojoPickListEMSID" value="#{pickListObjEMS.serverList}" var="ems"
itemValue="#{ems}" itemLabel="#{ems}" style="border-color: white!important" onTransfer="ajaxSubmit1()">  
<f:facet name="sourceCaption">Available</f:facet>  
<f:facet name="targetCaption">To be removed</f:facet>  
</p:pickList>
<p:remoteCommand action="# {updateSiteObj.onEMSTransfer}" name="ajaxSubmit1" >
<f:setPropertyActionListener value="# {pickListObjEMS}" target="#{updateSiteObj.tempObj}"/>
</p:remoteCommand> 
</p:column>                                     
</p:dataTable>
函数ajaxSubmit1(){/*设置第1行的pickListObjEMS.*/}
函数ajaxSubmit1(){/*设置第2行的pickListObjEMS.*/}
函数ajaxSubmit1(){/*设置第3行的pickListObjEMS.*/}
函数ajaxSubmit1(){/*设置第4行的pickListObjEMS.*/}
函数ajaxSubmit1(){/*设置第x行的pickListObjEMS.*/}
你看,它生成了多个同名的JS函数,相互覆盖直到最后一个!这就解释了为什么你总是得到最后一项;最后生成的JS函数是所有行调用的函数

<p:dataTable id="datatableid"  value="#{updateSiteObj.emsList}" var="pickListObjEMS" >
<p:column headerText="EMS"> 
<p:pickList id="pojoPickListEMSID" value="#{pickListObjEMS.serverList}" var="ems"
itemValue="#{ems}" itemLabel="#{ems}" style="border-color: white!important" onTransfer="ajaxSubmit1()">  
<f:facet name="sourceCaption">Available</f:facet>  
<f:facet name="targetCaption">To be removed</f:facet>  
</p:pickList>
<p:remoteCommand action="# {updateSiteObj.onEMSTransfer}" name="ajaxSubmit1" >
<f:setPropertyActionListener value="# {pickListObjEMS}" target="#{updateSiteObj.tempObj}"/>
</p:remoteCommand> 
</p:column>                                     
</p:dataTable>
至少有两种方法可以解决此问题:

<p:dataTable id="datatableid"  value="#{updateSiteObj.emsList}" var="pickListObjEMS" >
<p:column headerText="EMS"> 
<p:pickList id="pojoPickListEMSID" value="#{pickListObjEMS.serverList}" var="ems"
itemValue="#{ems}" itemLabel="#{ems}" style="border-color: white!important" onTransfer="ajaxSubmit1()">  
<f:facet name="sourceCaption">Available</f:facet>  
<f:facet name="targetCaption">To be removed</f:facet>  
</p:pickList>
<p:remoteCommand action="# {updateSiteObj.onEMSTransfer}" name="ajaxSubmit1" >
<f:setPropertyActionListener value="# {pickListObjEMS}" target="#{updateSiteObj.tempObj}"/>
</p:remoteCommand> 
</p:column>                                     
</p:dataTable>
  • 为每个JS函数指定一个唯一的名称。假设您的
    {pickListObjEMS}
    具有一个表示唯一标识符的
    id
    属性,则应执行以下操作:

    <p:dataTable id="datatableid"  value="#{updateSiteObj.emsList}" var="pickListObjEMS" >
    <p:column headerText="EMS"> 
    <p:pickList id="pojoPickListEMSID" value="#{pickListObjEMS.serverList}" var="ems"
    itemValue="#{ems}" itemLabel="#{ems}" style="border-color: white!important" onTransfer="ajaxSubmit1()">  
    <f:facet name="sourceCaption">Available</f:facet>  
    <f:facet name="targetCaption">To be removed</f:facet>  
    </p:pickList>
    <p:remoteCommand action="# {updateSiteObj.onEMSTransfer}" name="ajaxSubmit1" >
    <f:setPropertyActionListener value="# {pickListObjEMS}" target="#{updateSiteObj.tempObj}"/>
    </p:remoteCommand> 
    </p:column>                                     
    </p:dataTable>
    
    
    ...
    
  • 只需在表外只有一个
    而没有
    ,并将项目的唯一ID(或行索引)作为请求参数传递

    <p:dataTable id="datatableid"  value="#{updateSiteObj.emsList}" var="pickListObjEMS" >
    <p:column headerText="EMS"> 
    <p:pickList id="pojoPickListEMSID" value="#{pickListObjEMS.serverList}" var="ems"
    itemValue="#{ems}" itemLabel="#{ems}" style="border-color: white!important" onTransfer="ajaxSubmit1()">  
    <f:facet name="sourceCaption">Available</f:facet>  
    <f:facet name="targetCaption">To be removed</f:facet>  
    </p:pickList>
    <p:remoteCommand action="# {updateSiteObj.onEMSTransfer}" name="ajaxSubmit1" >
    <f:setPropertyActionListener value="# {pickListObjEMS}" target="#{updateSiteObj.tempObj}"/>
    </p:remoteCommand> 
    </p:column>                                     
    </p:dataTable>
    
    
    ...
    ...
    
    您只需要根据ID重构所需的
    {pickListObjEMS}
    ,该ID在此处作为请求参数传递,名为
    ID

  • <p:dataTable id="datatableid"  value="#{updateSiteObj.emsList}" var="pickListObjEMS" >
    <p:column headerText="EMS"> 
    <p:pickList id="pojoPickListEMSID" value="#{pickListObjEMS.serverList}" var="ems"
    itemValue="#{ems}" itemLabel="#{ems}" style="border-color: white!important" onTransfer="ajaxSubmit1()">  
    <f:facet name="sourceCaption">Available</f:facet>  
    <f:facet name="targetCaption">To be removed</f:facet>  
    </p:pickList>
    <p:remoteCommand action="# {updateSiteObj.onEMSTransfer}" name="ajaxSubmit1" >
    <f:setPropertyActionListener value="# {pickListObjEMS}" target="#{updateSiteObj.tempObj}"/>
    </p:remoteCommand> 
    </p:column>                                     
    </p:dataTable>