簡體   English   中英

為什么“受管Bean列表”在sessionscoped中變得包含空元素?

[英]Why Managed Bean List becomes including null elements in sessionscoped?

我想獲取有關聯系人的一些信息並將其顯示在表格中。 我使用了兩個由PersonalContactBusinessContact命名的托管bean和一個由Contact命名的抽象類,其中包括mphone派生的firstNamelastNameIDemailmphone屬性。還有一個通用類將bean添加到數組列表中。 我在這里僅將BusinessContact作為一個bean,將Business作為XHTML和tableBusiness作為一個表以及泛型類AddressBook ,personal文件與它們平行。

從屏幕獲取的輸入被分配給bean的屬性,但是當bean進入要添加的Arraylist ,其內容將為空。 這是為什么? 那是關於范圍的嗎?

這是我的豆子:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class BusinessContact extends Contact{
    private String companyName,workPhone;

    public BusinessContact() {}

    public BusinessContact(String companyName, String workPhone, String ID, String firstName, String lastName, String email, String mphone) {
        super(ID, firstName, lastName, email, mphone);
        this.companyName = companyName;
        this.workPhone = workPhone;
    }


    /**
     * Creates a new instance of BusinessContact
     */
    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public String getWorkPhone() {
        return workPhone;
    }

    public void setWorkPhone(String workPhone) {
        this.workPhone = workPhone;
    }        
}

這是我的business.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://xmlns.jcp.org/jsf/html"
  xmlns:f="http://xmlns.jcp.org/jsf/core"
  xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
 <h:head>
    <title>Contact</title>
 </h:head>
 <h:body>
    <h:form>
    <h:panelGrid columns="2"> 
     First Name:
     <h:inputText id="firstName" required="true" 
                  requiredMessage="Can not be blank" value="#{businessContact.firstName}">
     </h:inputText>
     ID:
     <h:inputText id="id" required="true" 
                  requiredMessage="Can not be blank" value="#{businessContact.ID}">
     </h:inputText>
     Last Name:
     <h:inputText id="lastName" required="true" 
                  requiredMessage="Can not be blank" value="#{businessContact.lastName}">
     </h:inputText>

     E-mail:
     <h:inputText id="email" required="true" 
                  requiredMessage="Can not be blank" value="#{businessContact.email}">
     </h:inputText>
     Mobile Phone:
     <h:inputText id="mphone" required="true" 
                  requiredMessage="Can not be blank" value="#{businessContact.mphone}">
     </h:inputText>
     Company Name:
     <h:inputText id="companyName" required="true" 
                  requiredMessage="Can not be blank" value="#{businessContact.companyName}">
     </h:inputText>
     Work Phone:
     <h:inputText id="workPhone" required="true" 
                  requiredMessage="Can not be blank" value="#{businessContact.workPhone}">
     </h:inputText>

    </h:panelGrid>

    <h:commandButton  value="Add" id="add" action="#{addressBook.add(BusinessContact)}"></h:commandButton>

    <h:commandButton  value="Delete" id="delete" action="#{addressBook.remove(BusinessContact)}"></h:commandButton>
    <h:outputLink id="t" value="tableBusiness.xhtml"> Click see the table</h:outputLink>
    <ui:debug hotkey="k" rendered="true"/>
  </h:form>
</h:body>

這是用於將bean放入arraylist的通用類:

import java.util.ArrayList;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class AddressBook <T extends Contact> {
    private ArrayList<T> list = new ArrayList<T>();
    T clas;

    public ArrayList<T> getList() {
        return list;
    }

    public void setList(ArrayList<T> list) {
        this.list = list;
    }

    public void add(T obj) { 
        this.clas=obj;
        //System.out.println(obj.getFirstName()+" ");
        list.add(obj);

    }
    public void remove(T obj)
    {
       list.remove(obj);
    }
    /**
     * Creates a new instance of AddressBook
     */
    public AddressBook() {}        
}

最后,此xhmtl用於在表中顯示arraylist:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>

</h:head>
<h:body>
    <h:form>
        "#{businessContact.firstName}"
       <h:dataTable value="#{addressBook.list}" var="BusinessContact">
        <h:column>
                <f:facet name="header">
                    First Name
                </f:facet>
            <h:outputText value="#{businessContact.firstName}">
            </h:outputText>
        </h:column>
            <h:column>
                <f:facet name="header">
                    Last Name
                </f:facet>
                #{businessContact.lastName}
            </h:column>
            <h:column>
                <f:facet name="header">
                  Mobile Phone
                </f:facet>
                #{businessContact.mphone}
            </h:column> 
            <h:column>
                <f:facet name="header">
                  E-mail
                </f:facet>
                #{businessContact.email}
            </h:column>  
            <h:column>
                <f:facet name="header">
                  Company Name
                </f:facet>
                #{businessContact.companyName}
            </h:column>  
            <h:column>
                <f:facet name="header">
                  Work Phone
                </f:facet>
                #{businessContact.workPhone}
            </h:column>  
      </h:dataTable>
    </h:form>
</h:body>
</html>

您正在命名var="BusinessContact"但嘗試將其用作"businessContact"

更改此行

<h:dataTable value="#{addressBook.list}" var="BusinessContact">

對此

<h:dataTable value="#{addressBook.list}" var="businessContact">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM