如何将值发送到辅助bean中的列表并显示为dataTable

时间:2014-10-16 00:58:25

标签: jsf jsf-2 datatable managed-bean

我还在学习如何使用Facelets,我正在尝试将输入值从JSF页面发送到ManagedBean中的列表,然后在dataTable中显示该信息。我有JSF页面输入数据,一个支持bean来管理列表,一个常规应用程序用于普通对象。但是,我无法弄清楚如何将输入值从JSF发送到辅助bean。

以下是我的观点:

<?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://java.sun.com/jsf/core">

    <h:head>
        <title>Guestbook Form</title>
    </h:head>
    <h:body>
        <h:form>
        <h1>Guestbook Application Form</h1>
        <p>Please fill out all entries and click the Submit button</p>
        <h:panelGrid columns="3">
            <h:outputText value = "Name: "></h:outputText>
            <h:inputText id="nameInputText" required ="true"
                         requiredMessage="Please enter your name"
                         value = "#{guestbookBean.name}"
                         validatorMessage="Name must be fewer than 20 
                         characters">
                        <f:validateLength maximum="20"/>                             
            </h:inputText>
            <h:message for="nameInputText" styleClass="error"/>
            <h:outputText value = "Email: "></h:outputText>
            <h:inputText id="emailInputText" required ="true"
                         requiredMessage="Please enter your email address"
                         value="#{guestbookBean.email}"
                         validatorMessage="Invalid email address format">
                <f:validateRegex pattern ="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"/>                            
            </h:inputText>
            <h:message for="emailInputText" styleClass="error"/>
            <h:outputText value = "Enter a message: "></h:outputText>
            <h:inputTextarea id="messageInputText" required ="true"
                         requiredMessage="Please enter a message"
                         value="#{guestbookBean.message}"
                         validatorMessage="Message must be fewer than 140 characters">
                        <f:validateLength maximum="140"/>                             
            </h:inputTextarea>
            <h:message for="messageInputText" styleClass="error"/>
        </h:panelGrid>
        <h:commandButton value="Submit" type ="Submit" action ="#{guestbookBean.setList()}"/>
        <h:commandButton value ="Reset Form" type ="reset"/>
        <h:outputText escape="false" value ="#{guestbookBean.result}"/>
        <h:dataTable value="#{guestbookBean.list}" var="guests"
                         styleClass="table" cellpadding="5" cellspacing="1" border="2">
            <h:column>
                <f:facet name ="header">Name</f:facet>
                #{guests.name}
            </h:column>
            <h:column>
                <f:facet name ="header">Email</f:facet>
                #{guests.email}
            </h:column>
            <h:column>
                <f:facet name ="header">Message</f:facet>
                #{guests.message}
            </h:column>
        </h:dataTable>
        </h:form>

    </h:body>
</html>

这是我的支持bean:

package guestbook;

import java.util.List;
import java.util.ArrayList;
import java.io.Serializable;
import javax.enterprise.context.Dependent;
import javax.faces.bean.*;


@ManagedBean(name = "guestbookBean")
public class GuestbookBean implements Serializable{

    private String na;
    private String em;
    private String m;
    private List<GuestbookEntry> bookList = new ArrayList<>();

    //Set name
     public void setName(String first)
    {
        this.na = first;
    }

    //Set email
    public void setEmail(String mail)
    {
        this.em = mail;
    }

    //Set message
    public void setMessage(String msg)
    {
        this.m = msg;
    }

    //Return the name
    public String getName()
    {
        return na;
    }

    //Return the email
    public String getEmail()
    {
        return em;
    }

    //Return the message
    public String getMessage()
    {
        return m;
    }


    public void setList()
    {
       GuestbookEntry bk = new GuestbookEntry();
       bk.setName(na);
       bk.setEmail(em);
       bk.setMessage(m);

       bookList.add(0, bk);       
    }

    public List<GuestbookEntry> getList()
    {
        return bookList;
    }

    // returns result for rendering on the client
   public String getResult()
   {
      if ( !bookList.isEmpty())
      {
         return "<p style=\"background-color:yellow;width:200px;" +
            "padding:5px\">Data submitted successfully"+ "</p>";
      }
      else
      {
         return ""; // request has not yet been made
      }
   } // end method getResult


}

这是我的模特:

package guestbook;

public class GuestbookEntry {

    private String firstName;
    private String lastName;
    private String email;
    private String message;

    public void setFirstName(String fn)
    {
        firstName = fn;
    }

    public void setLastName(String ln)
    {
        lastName = ln;
    }

    public void setEmail(String em)
    {
        email = em;
    }

    public void setMessage(String m)
    {
        message = m;
    }

    public String getFirstName()
    {
        return firstName;
    }

    public String getLastName()
    {
        return lastName;
    }

    public String getEmail()
    {
        return email;
    }

    public String getMessage()
    {
        return message;
    }

}

1 个答案:

答案 0 :(得分:1)

由于您未在提交

后清除字段,因此未重置数据

您可以设置为空na, em and m以重置字段

关于表,尝试将@ViewScoped添加到您的bean,默认范围是RequestScope,它不保留您的表