Welcome 微信登录

首页 / 软件开发 / JAVA / JSF页面出错的时DataTable不能恢复原有值的解决办法

JSF页面出错的时DataTable不能恢复原有值的解决办法2011-06-21 BlogJava 千里冰封在使用JSF的时候,它的事件驱动模式是一个很好的开发方法,但是由于JSF 毕竟现在的版本才1.2,所以对于有些细节上面处理就不一定如人意了,一般来说 ,当JSF的页面验证有错或者有其它的错误的时候,我们以前输入的值会在渲染 页面的时候,恢复回来,也就是说,一个域我们绑定在后台的属性是一个int值 ,但是我们前台输入了“abcd”,这个时候,后台在验证阶段就过不去了。然后 直接渲染页面,JSF 会把我们输入错误的abcd渲染出来。而不是把我们以前绑定 在后台的那个属性的值,取出来,这样也正是我们想要的结果,但是当我们的页 面包括了dataTable的时候,并且DataTable里面的值是可以编辑的时候,当页面 上有错误的时候,别的域都会显示刚才我们输入的值,唯有DataTable里面的输 入域的值没有还原为我们刚才输入的值,而是绑定在后台的值,这显然不是我们 想要看到的。但是当DataTable有错误的输入的时候,DataTable才会把它的值恢 复回来。说了这么说,感觉有点语无伦次了,还是拿代码说话吧。

<%@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>