2014-10-03 6 views
0

Я пытаюсь сделать SIMPLE webapp, который отображает список partyguest и позволяет добавить нового гостя. Я хочу хранить гостей в ArrayList. Я не знаю, где и как вызывать метод party.addGuest().ManagedBean с ArrayList, как добавить элементы?

index.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"> 
    <h:head> 
     <title>Big Party</title> 
    </h:head> 
    <h:body> 
     <h2>Add new guest to Big Party: </h2> 
     <h:form> 
      <h:inputText id="guestName" value="#{guest.name}"/> 
      <h:commandButton value="Add guest" action="guests" /> 
     </h:form> 
     <h:link value="GuestList" outcome="guests" /> 
    </h:body> 
</html> 

guests.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:ui="http://xmlns.jcp.org/jsf/facelets"> 
    <h:head> 
     <title>Super Party</title> 
    </h:head> 
    <h:body> 
     <h2>New guest:</h2> 
     <h:outputLabel value="#{guest.name}" /> 

     <h2>Guests:</h2> 
     <ul> 
      <ui:repeat value="#{party.guests}" var="curr"> 
       <li>#{curr}</li> 
      </ui:repeat> 
     </ul> 

     <h2>Guests count:</h2> 
     <h:outputLabel value="#{party.cnt}"/> 
    </h:body> 
</html> 

Party.java

package managedBeans; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 
import javax.annotation.PostConstruct; 
import javax.faces.bean.ApplicationScoped; 
import javax.faces.bean.ManagedBean; 

@ManagedBean(name = "party") 
@ApplicationScoped 
public class Party implements Serializable { 

    private List<String> guests; 
    private int cnt; 

    public Party() { 
    } 

    @PostConstruct 
    public void init() { 
     guests = new ArrayList<>(); 
     guests.add("Guest A"); 
     guests.add("Guest B"); 
    } 

    public List<String> getGuests() { 
     return guests; 
    } 

    public void addGuest(String guest) { 
     guests.add(guest); 
    } 

    public int getCnt() { 
     cnt = guests.size(); 
     return cnt; 
    } 
} 

Guest.java

package managedBeans; 

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 

@ManagedBean(name = "guest") 
@RequestScoped 
public class Guest implements Serializable{ 

    private String name; 

    public Guest() { 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

ответ

0

Если вы используете JSF 2, вы можете иметь что-то подобное в вашей index.xhtml (но она может быть легко преобразован в более ранней версии JSF):

... 
    <h:form> 
     <h:inputText id="guestName" value="#{party.newGuest}"/> 
     <h:commandButton value="Add guest" action="#{party.addGuest()}" /> 
    </h:form> 
... 

И, в Party.java:

private String newGuest; 
.... 
public String getNewGuest() { 
    return this.newGuest; 
} 

public void setNewGuest(String guest) { 
    this.newGuest = guest; 
} 
.... 
public void addGuest() { 
    guests.add(newGuest); 
    newGuest = null; 
} 

Нет необходимости Guest.java в этом прецеденте. Однако можно сделать это лучше.