Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
JSF 2 DataTable-单击commandlink后,所有现有项都将重置为新项()_Jsf - Fatal编程技术网

JSF 2 DataTable-单击commandlink后,所有现有项都将重置为新项()

JSF 2 DataTable-单击commandlink后,所有现有项都将重置为新项(),jsf,Jsf,在我单击commandlink后,无法完全理解为什么datatable中的所有现有项都被重置为new Item()。此应用程序为用户提供联系人列表以及编辑(commandlink)按钮,用户可以单击该按钮将所选项目更改为编辑模式。当我单击commandlink时,它调用bean的edit(),getRowData()将获得预期的行。但行中的exist数据不知何故是空的(确切地说是新的MSAMContactJTO()。事实上,datatable中的所有现有行都显示了如何重置为空白 下面是xhtml

在我单击commandlink后,无法完全理解为什么datatable中的所有现有项都被重置为new Item()。此应用程序为用户提供联系人列表以及编辑(commandlink)按钮,用户可以单击该按钮将所选项目更改为编辑模式。当我单击commandlink时,它调用bean的edit(),getRowData()将获得预期的行。但行中的exist数据不知何故是空的(确切地说是新的MSAMContactJTO()。事实上,datatable中的所有现有行都显示了如何重置为空白

下面是xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html 
  xmlns="http://www.w3.org/1999/xhtml" 
  xmlns:ui="http://java.sun.com/jsf/facelets" 
  xmlns:f="http://java.sun.com/jsf/core" 
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:t="http://myfaces.apache.org/tomahawk"
  xmlns:c="http://java.sun.com/jstl/core">

<!-- saved from url=(0049)http://usmodev/my_send_a_message/address_book.htm -->
<h:head><title>My Send a Message</title>
</h:head> 

<h:body>  

<h:form id="addressBookForm" prependId="false">
  <h:dataTable id="contactListTable" border="0" cellspacing="0" cellpadding="0" 
    value="#{MSAMAddressBook2ListBean.contactListTable}"
    rendered="#{not empty MSAMAddressBook2ListBean.contactList}"  
    var="item">

    <h:column>
      <h:panelGrid id="contactNameColumn" >
        <h:panelGroup style="text-align:left; white-space:nowrap;" rendered="#{!item.editMode    and !item.newAdd}">
          <h:outputText value="#{item.contactName}"/>
        </h:panelGroup>
       <h:panelGroup style="text-align:left; white-space:nowrap;" rendered="#{item.editMode || item.newAdd}">
         <h:inputText  id="contactName" value="#{item.contactName}" maxlength="30" size="30" />
       </h:panelGroup>
      </h:panelGrid>

    </h:column>

    <h:column>
      <h:panelGrid id="actionColumn" cellpadding="0" cellspacing="0">
      <h:commandLink id="editContact" action="#{MSAMAddressBook2ListBean.edit}"  value="EDIT"/>
        <!-- f:ajax event="action" execute="@form" render="contactListTable"/ -->
      </h:panelGrid>    
    </h:column>
  </h:dataTable>
</h:form> 

</h:body>
</html>

我的朋友给我发个信
下面是管理bean:

package com.arch.myaccount.jsf;

import java.io.Serializable;
import java.util.List;
import java.util.ArrayList;

import com.arch.database.myaccount.MSAMAddressBookDatabase;
import com.arch.myaccount.MSAMContactDTO;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.annotation.PostConstruct;

@SuppressWarnings("serial")
@ManagedBean(name="MSAMAddressBook2ListBean")
@ViewScoped
public class MSAMAddressBook2ListBean extends JSFBean implements Serializable 
{

    // table list info
    private transient DataModel<MSAMContactJTO> contactListTable;
    private ArrayList<MSAMContactJTO> contactList = null;

    @PostConstruct
    public void init() {
        getContactList();
    }

    public String edit() {

        String result = "successful";

        MSAMContactJTO item = getContactListTable().getRowData();
        item.setEditMode(true);

        return result;
    }


    public List<MSAMContactJTO> getContactList() {
        if (contactList == null) {
        try {
             loadContactList();
        }
        catch (Exception ex) {}
        }

        return contactList;
    }

    public void loadContactList() {

        try {
            List<MSAMContactDTO> contacts = new MSAMAddressBookDatabase().findContactsByLoginName(getLoginID());
            if (contactList == null) contactList = new ArrayList<MSAMContactJTO>(); 
            else contactList.clear();

            for (MSAMContactDTO contact :contacts) {
                MSAMContactJTO abDTO = new MSAMContactJTO();
                abDTO.copyFromMSAMContactDTO(contact);
                contactList.add(abDTO);
            }


        }
        catch (Exception ex) {
            addFatalMessage("We are unable to fulfill your request.  Please try again later");
            ex.printStackTrace();
        }
    }


    public DataModel<MSAMContactJTO> getContactListTable() {
        if (contactListTable == null) {
            contactListTable = new ListDataModel<MSAMContactJTO>(contactList);
        }
            return contactListTable;
    }

    public void setContactList(ArrayList<MSAMContactJTO> contactList) {
        this.contactList = contactList;
    }
}
package com.arch.myaccount.jsf;
导入java.io.Serializable;
导入java.util.List;
导入java.util.ArrayList;
导入com.arch.database.myaccount.MSAMAddressBookDatabase;
导入com.arch.myaccount.MSAMContactDTO;
导入javax.faces.model.DataModel;
导入javax.faces.model.ListDataModel;
导入javax.faces.bean.ManagedBean;
导入javax.faces.bean.ViewScoped;
导入javax.annotation.PostConstruct;
@抑制警告(“串行”)
@ManagedBean(name=“MSAMAddressBook2ListBean”)
@视域
公共类MSAMAddressBook2ListBean扩展了JSFBean,实现了可序列化
{
//表列表信息
私有瞬态数据模型contactListTable;
private ArrayList contactList=null;
@施工后
公共void init(){
getContactList();
}
公共字符串编辑(){
String result=“成功”;
MSAMContactJTO item=getContactListTable().getRowData();
item.setEditMode(真);
返回结果;
}
公共列表getContactList(){
if(contactList==null){
试一试{
loadContactList();
}
捕获(例外情况除外){}
}
返回联系人列表;
}
public void loadContactList(){
试一试{
List contacts=new MSAMAddressBookDatabase().findContactsByLoginName(getLoginID());
如果(contactList==null)contactList=new ArrayList();
else contactList.clear();
用于(MSAMContactDTO联系人:联系人){
MSAMContactJTO abDTO=新的MSAMContactJTO();
abDTO.copyFromMSAMContactDTO(联系人);
联系人列表。添加(abDTO);
}
}
捕获(例外情况除外){
addFatalMessage(“我们无法满足您的请求,请稍后再试”);
例如printStackTrace();
}
}
公共数据模型getContactListTable(){
如果(contactListTable==null){
contactListTable=新的ListDataModel(contactList);
}
返回contactListTable;
}
public void setContactList(ArrayList contactList){
this.contactList=联系人列表;
}
}

我刚刚注意到,如果我将其更改为sessionscope,它就会工作。问题是我没有在Websphere中正确设置JSF2.0。在遵循以下设置说明后,它工作正常: