【问题标题】:Struts2 validation doesn't work only with regexStruts2 验证不仅适用于正则表达式
【发布时间】:2014-03-28 00:10:03
【问题描述】:

验证适用于所需的字符串(和电子邮件,我只测试了这些)。但是当我尝试使用正则表达式时,验证无效。

<!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 个数字。这会在字段丢失时出错,如果我插入像“123”这样的 telefono 则不会出错。

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)。

【问题讨论】:

    标签: java regex jsp validation struts2


    【解决方案1】:

    参数应该是regexExpression,而不是expression

    http://struts.apache.org/development/2.x/docs/regex-validator.html

    要显示特定字段的错误,请使用fieldName 属性,例如,

    <s:fielderror fieldName="cogname" />
    

    注意&lt;s:form&gt;validate 属性与客户端验证有关;它与服务器端的验证无关。

    【讨论】:

    • 谢谢,这行得通!关于另一个次要问题?如何在通讯员字段附近显示每条消息错误?如果我删除 错误的反馈就会丢失。
    【解决方案2】:

    对于次要问题(但应该是另一个问题,恕我直言),原因是您需要在字段本身下方放置一个带有字段名称的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”的字段错误时才会呈现该字段。

    【讨论】:

    • 是的,也许 3 个问题应该更好……关于另一个?如果我收到错误,为什么所有字段都被删除?我怎样才能防止这种情况发生?
    • 因为您正在使用另一个来源 (anagraficaVDR) 作为对象的值,and that source is not loaded yet。然后使用 prepare() 或类似的东西。
    • 不存在替代 prepare() 的另一种替代方式吗?我应该将数据复制到某个地方,然后在prepare()中复制它们之后,它很长......
    • Fare domande multiple è il tuo tallone da 杀手? :) Apri una nuova e posta il codice (interessato) della action...
    • 希望代码之神原谅我:stackoverflow.com/questions/22045493/…
    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多