<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%--
This file is an entry point for JavaServer Faces application.
--%>
<f:view>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<style>
.header{
background-color:white;
}
#mainForm\:data input{
border:0;
color:red;
}
</style>
</head>
<body>
<h:form id="mainForm">
<h:messages style="color:red" />
名字:<h:inputText id="listName" value="#{Test1.listName}" >
<f:validateLength maximum="5"/>
</h:inputText>
<h:commandButton value="Submit" action="#{Test1.save}"/>
測試用的:<h:inputText id="testName" value="#{Test1.testName}"/>
<h:dataTable headerClass="header" rowClasses="header" bgcolor="blue" cellspacing="1" cellpadding="0"
border="0" value="#{Test1.listDataModel}" id="data" var="p">
<h:column>
<f:facet name="header">
<h:outputText value="Name"/>
</f:facet>
<h:outputText style="background-color:white;width:100%" id="name" value="#{p.name}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Sex"/>
</f:facet>
<h:inputText id="sex" value="#{p.sex}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Age"/>
</f:facet>
<h:inputText id="age" value="#{p.age}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Email"/>
</f:facet>
<h:inputText id="email" value="#{p.email}"/>
</h:column>
</h:dataTable>
</h:form>
</body>
</html>
</f:view>
<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%--
This file is an entry point for JavaServer Faces application.
--%>
<f:view>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<style>
.header{
background-color:white;
}
#mainForm\:data input{
border:0;
color:red;
}
</style>
</head>
<body>
<h:form id="mainForm">
<h:messages style="color:red" />
名字:<h:inputText id="listName" value="#{Test1.listName}" >
<f:validateLength maximum="5"/>
</h:inputText>
<h:commandButton value="Submit" action="#{Test1.save}"/>
測試用的:<h:inputText id="testName" value="#{Test1.testName}"/>
<h:dataTable headerClass="header" rowClasses="header" bgcolor="blue" cellspacing="1" cellpadding="0"
border="0" value="#{Test1.listDataModel}" id="data" var="p">
<h:column>
<f:facet name="header">
<h:outputText value="Name"/>
</f:facet>
<h:outputText style="background-color:white;width:100%" id="name" value="#{p.name}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Sex"/>
</f:facet>
<h:inputText id="sex" value="#{p.sex}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Age"/>
</f:facet>
<h:inputText id="age" value="#{p.age}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Email"/>
</f:facet>
<h:inputText id="email" value="#{p.email}"/>
</h:column>
</h:dataTable>
</h:form>
</body>
</html>
</f:view>
通過以上的代碼我們就可以發現問題了。在查看了JSF的源代碼才發現,DataTable有一個特殊的處理機制,那就是只有它自己包含在另外一個DataTable的時候,或者它自己內部的值有錯的時候,才會渲染submittedValue,否則,它只會渲染綁定在后臺的值。知道這一點以后,就非常好解決了,那就是在我們的DataTable有外層再包括一個DataTable,當然,它外層的DataTable最好不要有具體的值,所有我們就包含一個空的DataTable來實現它了,這樣解決有點不太好看,但是也是沒有辦法的辦法了。呵呵,希望JSF2.0中對此會有一些改進。
改后的代碼如下:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%--
This file is an entry point for JavaServer Faces application.
--%>
<f:view>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<style>
.header{
background-color:white;
}
#mainForm\:data input{
border:0;
color:red;
}
</style>
</head>
<body>
<h:form id="mainForm">
<h:messages style="color:red" />
名字:<h:inputText id="listName" value="#{Test1.listName}" >
<f:validateLength maximum="5"/>
</h:inputText>
<h:commandButton value="Submit" action="#{Test1.save}"/>
測試用的:<h:inputText id="testName" value="#{Test1.testName}"/>
<h:dataTable value="1"><!--只是在這里加了一個空的DataTable-->
<h:column>
<h:dataTable headerClass="header" rowClasses="header" bgcolor="blue" cellspacing="1"
cellpadding="0" border="0" value="#{Test1.listDataModel}" id="data" var="p">
<h:column>
<f:facet name="header">
<h:outputText value="Name"/>
</f:facet>
<h:outputText style="background-color:white;width:100%" id="name" value="#
{p.name}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Sex"/>
</f:facet>
<h:inputText id="sex" value="#{p.sex}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Age"/>
</f:facet>
<h:inputText id="age" value="#{p.age}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Email"/>
</f:facet>
<h:inputText id="email" value="#{p.email}"/>
</h:column>
</h:dataTable>
</h:column>
</h:dataTable>
</h:form>
</body>
</html>
</f:view>
<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%--
This file is an entry point for JavaServer Faces application.
--%>
<f:view>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<style>
.header{
background-color:white;
}
#mainForm\:data input{
border:0;
color:red;
}
</style>
</head>
<body>
<h:form id="mainForm">
<h:messages style="color:red" />
名字:<h:inputText id="listName" value="#{Test1.listName}" >
<f:validateLength maximum="5"/>
</h:inputText>
<h:commandButton value="Submit" action="#{Test1.save}"/>
測試用的:<h:inputText id="testName" value="#{Test1.testName}"/>
<h:dataTable value="1"><!--只是在這里加了一個空的DataTable-->
<h:column>
<h:dataTable headerClass="header" rowClasses="header" bgcolor="blue" cellspacing="1"
cellpadding="0" border="0" value="#{Test1.listDataModel}" id="data" var="p">
<h:column>
<f:facet name="header">
<h:outputText value="Name"/>
</f:facet>
<h:outputText style="background-color:white;width:100%" id="name" value="#
{p.name}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Sex"/>
</f:facet>
<h:inputText id="sex" value="#{p.sex}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Age"/>
</f:facet>
<h:inputText id="age" value="#{p.age}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Email"/>
</f:facet>
<h:inputText id="email" value="#{p.email}"/>
</h:column>
</h:dataTable>
</h:column>
</h:dataTable>
</h:form>
</body>
</html>
</f:view>
如果大家還有什么更好的方法,也希望能分享一下,這里只帖出來了JSP的代碼,JAVA代碼就沒帖了,因為都是一些getter,setter方法。
盡管千里冰封
依然擁有晴空
你我共同品味JAVA的濃香.