Jsf 如何将值发送到支持bean中的列表并显示为dataTable
我仍在学习如何使用Facelets,并尝试将JSF页面中输入的值发送到ManagedBean中的列表,然后在dataTable中显示该信息。我有JSF页面来输入数据,有一个支持bean来管理列表,还有一个用于普通对象的常规应用程序。然而,我不知道如何将输入值从JSF发送到支持bean 以下是我的看法: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
<?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;
}
}