验证可以正常使用所需的字符串(和电子邮件,我测试了这些)。但是当我尝试使用正则表达式时,验证没有效果。
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="cognome">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>Cognome è un campo obbligatorio</message>
</field-validator>
</field>
<field name="telefono">
<field-validator type="requiredstring">
<message key="errors.required" />
</field-validator>
<field-validator type="regex">
<param name="expression">[0-9]{9,15}</param>
<message>Il numero di telefono deve essere minimo di 9 cifre
</message>
</field-validator>
</field>
</validators>
telefono 必须包含9到15位数字。这会在字段丢失时出错,如果我插入 telefono 就像“123”一样没有错误。
jsp:
<%@ page language="java" contentType="text/html;"
import="java.util.*,it.almaviva.bean.*,it.almaviva.delegate.*;"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link href="${pageContext.request.contextPath}/css/stile1.css" rel="stylesheet" type="text/css" />
<title>Registrazione account</title>
</head>
<body>
<jsp:include page="header.jsp"/>
<s:actionerror />
<s:form name="formDatiUtente" action="inviaRichiesta.action" method="post" theme="simple" validate="true">
<center>
<s:fielderror></s:fielderror>
<table width="48%" class="LISTA" border="0" cellPadding="3" cellSpacing="5" align="center">
<tr>
<td width="35%">
<p class="testodx">
<s:text name="label.cognome" />
</p>
</td>
<td>
<p class="testosx">
<s:textfield name="cognome" id="idCognome"
size="30" value="%{anagraficaVDR.cognome}" />
</p>
</td>
</tr>
<tr>
<td>
<p class="testodx"><s:text name="label.telefono_Ufficio_reparto" /></p>
</td>
<td>
<s:textfield name="telefono" id="idTelefono_Ufficio_reparto" size="30" value="%{anagraficaVDR.telefono}"/>
</td>
</tr>
</table>
<br>
<s:if test="!gestioneAmministratore">
<s:submit method="execute" cssClass="bottone" key="label.invia" align="center" />
</s:if>
</center>
</s:form>
</body>
</html>
另一个次要问题是如果我删除它:
<s:fielderror></s:fielderror>
不显示错误消息。这很奇怪,因为例如here这个字符串丢失并且错误消息正确显示(每个字段下都是我喜欢的东西)。
另一个次要问题是,如果我没有插入字段并按下提交,我得到(正确)错误,但字段中的所有值都被删除,而我更喜欢保留所有(如前所述)例如I linked)。
答案 0 :(得分:5)
参数应为regexExpression
,而不是expression
。
http://struts.apache.org/development/2.x/docs/regex-validator.html
要显示特定字段的错误,请使用fieldName
属性,例如,
<s:fielderror fieldName="cogname" />
请注意,<s:form>
的{{1}}属性会考虑客户端验证;它与服务器端的验证无关。
答案 1 :(得分:2)
对于次要问题(但它应该是另一个问题,imho),原因是你需要在字段本身下面放置一个带有字段名称的fielderror。
使用某些Struts主题时,如默认主题,它会自动处理。
由于您可能正在使用简单主题,因此您需要自己完成(还要注意您应该使用标签而不是段落):
<label for="idCognome">
<s:text name="label.cognome" />
</label>
<s:textfield name="cognome" id="idCognome" value="%{anagraficaVDR.cognome}" />
<s:fielderror fieldName="cognome"/>
只有在找到名为“cognome”的fielderror时才会呈现该字段。