我的addNew.xhtml
页面中有很多字段。
我必须在客户端对字段进行验证。
其中一个字段是city
。
如果我没有输入city
city cannot be left blank
,我想收到验证错误。
以前我正在研究grails框架,自定义验证是一项非常简单的任务。 现在我正在研究jsf,我在互联网上找不到好的例子来解决这个问题。
你可以帮我实现这个验证吗
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link type="text/css" rel="stylesheet" href="../css/global.css" />
</head>
<body>
<div class="windowContents">
<a4j:form style="width: 700px; height: 500px" ajaxSubmit="true"
id="addNewRecord">
<a4j:repeat value="#{addAction.editedtable}"
var="address">
<br />
<br />
<table border="0" style="font-size: 12px; width: 100%;">
<tr>
<td><h:outputText value="File ID:" /></td>
<td><h:outputText value="#{address.fileId}" /></td>
<td><h:outputText value="Insured Name" />:</td>
<td><h:outputText value="#{dataEntryAction.insuredName}" /></td>
</tr>
<tr>
<td><h:outputText value="House No" /><span class="red">*</span>:</td>
<td><h:inputText value="#{address.houseNumber}" /></td>
<td><h:outputText value="Street" /><span class="red">*</span>:</td>
<td><h:inputText value="#{address.street}" /></td>
</tr>
<tr>
<td><h:outputText value="City" />:</td>
<td><h:inputText id ="city" value="#{address.city}" required="false" requiredMessage="City is required" /></td>
<h:message for="city" />
</tr>
</table>
</a4j:repeat>
<br />
<h:panelGroup rendered="true">
<a4j:commandButton value="save" image="../images/buttons/save.gif"
render="@form"
action="#{addAction.saveEditedAndPrepareHistory(addAction.userComment,user, addAction.editedtable)}"
reRender="dataEnrtyTable,dataEntryDetails"
oncomplete="javascript:Richfaces.hideModalPanel('addNewRecordPanel')"
style="align:center;" />
</h:panelGroup>
</a4j:form>
</div>
答案 0 :(得分:3)
JSF中有不同的选项来实现您的任务,
1.
客户端验证。
您在问题中询问了客户端验证。
<tr>
<td><h:outputText value="City" />:</td>
<td><h:inputText value="#{address.city}" id="cityID"/></td>
</tr>
<h:commandLink action="#{yourBean.submitMethod}" onclick="checkCity(cityID)">
<h:outputText value="Submit"></h:outputText>
</h:commandLink>
function checkCity(cityID)
{
var cityEntered = $("#" + cityID).val();
//Do whatever validations you want
}
与您的问题无关 还有其他方法(你在问题中没有问过)。
2.
maxlength
- 可在此字段中输入的最大字符数。
<h:inputText id="cityID" value="#{yourBean.cityID}" maxlength="10"/>
3
。服务器端验证
假设您没有为onclick
提出h:commandLink
事件。 1
在Facelets页面中,
<h:messages globalOnly="true" layout="table" />
public String submitMethod() {
try
{
FacesContext facesContext = null;
facesContext=FacesContext.getCurrentInstance();
ArrayList <String> errorList= new ArrayList <String>();
if(this.cityID.equals(//something))
{
errorList.add("//some message");
}
if(errorList != null && errorList.size() > 0)
{
for(int i=0;i<errorList.size();i++)
{
msg= (String)errorList.get(i);
FacesMessage facemsg= new FacesMessage(FacesMessage.SEVERITY_ERROR,msg ,msg);
facesContext.addMessage(null, facemsg);
}
}
}
catch(Exception e)
{
//Do error handling
}
}
4.
内置验证程序组件
<h:inputText id="cityID" value="#{yourBean.cityID}">
<f:validateLength minimum="6" maximum="15"/>
</h:inputText>
答案 1 :(得分:3)
严格回答你的问题,在JSF 1.2+中,这应该这样做:
<h:outputLabel for="city" value="City" />
<h:inputText id="city" value="#{address.city}" required="true" requiredMessage="City cannot be left blank." />
<h:message for="city" />
我认为这些文章可能会让您感兴趣:
我希望它有所帮助!