2015-07-22 48 views
0

我想創建一個定期聯繫POJO需要在電話號碼和名稱。然後在JSF上,我正在閱讀這些屬性並試圖調用一個支持方法將它們添加到聯繫人列表中。但由於某種原因,聯繫人仍然回覆爲空。我試圖使用管理bean屬性,但沒有運氣。任何幫助,將不勝感激。這是我的聯繫管理bean與支持bean不通過值

package com.contact.TO; 

import java.io.Serializable; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import javax.faces.bean.SessionScoped; 
@ManagedBean 
@RequestScoped 
public class ContactTO implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private String name; 
    private String phoneNumber; 

    public ContactTO() { 
     name=null; 
     phoneNumber=null; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getPhoneNumber() { 
     return phoneNumber; 
    } 
    public void setPhoneNumber(String phoneNumber) { 
     this.phoneNumber = phoneNumber; 
    } 

} 

這裏是我的支持類

package com.contact.backing; 

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

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.RequestScoped; 
import javax.faces.bean.SessionScoped; 
import javax.faces.view.ViewScoped; 

import com.contact.TO.ContactTO; 

@ManagedBean(name="contactBacking") 
@RequestScoped 
public class ContactBacking implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    @ManagedProperty(value="#{contactTO}") 
    private ContactTO contact; 
    private List<ContactTO> contacts = new ArrayList<>(); 

    public ContactBacking() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public void addContact(){ 
     contacts.add(contact); 
     contact=null; 
    } 
    public void saveContact(String name, String phone, String oldName, String oldPhone){ 
     for(ContactTO c : contacts){ 
      if(c.getName().equalsIgnoreCase(oldName) && c.getPhoneNumber().equalsIgnoreCase(oldPhone)){ 
       c.setName(name); 
       c.setPhoneNumber(phone); 
      }else{ 
       addContact(); 
      } 
     } 
    } 
    public List<ContactTO> getContacts() { 
     return contacts; 
    } 

    public void setContacts(List<ContactTO> contacts) { 
     this.contacts = contacts; 
    } 

    public ContactTO getContact() { 
     return contact; 
    } 

    public void setContact(ContactTO contact) { 
     this.contact = contact; 
    } 

} 

這裏是我的JSF:

<!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:ui="http://xmlns.jcp.org/jsf/facelets" 
     xmlns:f="http://java.sun.com/jsf/core"> 
<h:head><title></title> 
<link href="./css/styles.css" rel="stylesheet" type="text/css"/> 
</h:head> 
<h:body> 
<h:form> 
    <h:inputText value="#{contactTO.name}" /> 
    <h:inputText value="#{contactTO.phoneNumber}" /> 
    <h:commandButton value="Save" 
        action="#{contactBacking.addContact}" > 

     <f:ajax render="contactList" />    
    </h:commandButton> 
    <h:panelGroup id="contactList"> 
     <ui:repeat var="c" value="#{contactBacking.contacts}" varStatus="status"> 
      <h:inputText value="#{c}"></h:inputText> 

     </ui:repeat> 
    </h:panelGroup> 
    </h:form> 
</h:body></html> 

正如你可以看到我只是有采取在屬性名的兩個輸入並且phoneNumber和動作按鈕調用了後備方法contactBacking.addContact。但是我所有的聯繫人都是空的。請問managebean或範圍是否錯誤?

回答

0

您的導入有誤,對受管Bean使用javax.faces.bean而不是javax.faces.view作用域,包javax.faces.view是CDI規範的一部分。

+1

反正他不使用進口任何地方......所以它不影響functionnality –

+0

它可以影響是,如果未啓用CDI該bean不會被管理... –

+0

唯一不好的導入是'import javax.faces.view.ViewScoped;',但他在任何地方都使用'RequestScoped' ...所以不會影響。 –

2

當使用f:ajax時,您的輸入內容不會發布,默認execute@this,這意味着只發布操作。添加execute="@form"

的更多信息: