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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 如何将值发送到支持bean中的列表并显示为dataTable_Jsf_Jsf 2_Datatable_Managed Bean - Fatal编程技术网

Jsf 如何将值发送到支持bean中的列表并显示为dataTable

Jsf 如何将值发送到支持bean中的列表并显示为dataTable,jsf,jsf-2,datatable,managed-bean,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 Tran

我仍在学习如何使用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>

由于提交后未清除字段,因此未重置数据

您可以设置为null
na、em和m
以重置字段


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

,那么您的错误是什么?你有例外吗?或者在提交之后,您没有看到数据表中充满了数据?好吧,在修复了一点代码之后,我设法将值发送到列表中,并将其作为数据表读回。但是在我点击submit之后,表单中的数据不会重置,它只显示一行数据。好的。我已经解决了重置的问题。但我仍然不明白为什么只显示一行数据。如果我一次将多个对象添加到列表中,它将在多行中显示所有这些对象。但是如果我通过submit按钮输入它,它只会将它放在一个索引中。
booklist.add(bk)
不应该只是将一个索引中的值向右推吗?尝试将@ViewScoped添加到bean中。。看看这是否解决了您的问题added@ApplicationScoped。这就解决了问题。谢谢你的帮助。干得好!请记住,应用程序范围比ViewScope的范围更广。。仅在需要时使用应用程序范围。
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;
    }

}