0

我在 Struts2 应用程序的表单中有一个单选按钮。我可以验证文本框字段,但我不能对单选按钮(必须选中一个)和复选框列表(至少必须选中一个)进行验证。

我关注了一些关于该主题的页面,但没有一个解决方案有效。

最后我在 XML 文件中有这个:

<field name="sexo">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>*</message>
    </field-validator>
</field>    

任何帮助将不胜感激。

添加:

这是动作类:(如果不存在与验证相关的代码有关系吗?)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package agenda;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;

/**
 *
 * @author Jaime
 */
public class ProfileAction {

    private String username;
    private String password;
    private String nombres;
    private String apellidopaterno;
    private String apellidomaterno;
    private String fechanacimiento;
    private String direccion;
    private String comuna;
    private String telefonofijo;
    private String telefonomovil;
    private String email;
    private String sexo;
    private String[] subscripcion;

    public ProfileAction() {
    }

    /**
     *
     * @return @throws Exception
     */
    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        String usuario = (String) session.getAttribute("id");
        if (usuario != null && !usuario.equals("") && !usuario.equals("0")) {
            return "success";
        } else {
            return "error";
        }
    }

    /**
     * Muestra el formulario de registro de cliente
     *
     * @return
     * @throws Exception
     */
    public String register() throws Exception {
        return "success";
    }

    /**
     * @return the username
     */
    public String getUsername() {
        return username;
    }

    /**
     * @param username the username to set
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * @return the nombres
     */
    public String getNombres() {
        return nombres;
    }

    /**
     * @param nombres the nombres to set
     */
    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    /**
     * @return the apellidopaterno
     */
    public String getApellidopaterno() {
        return apellidopaterno;
    }

    /**
     * @param apellidopaterno the apellidopaterno to set
     */
    public void setApellidopaterno(String apellidopaterno) {
        this.apellidopaterno = apellidopaterno;
    }

    /**
     * @return the apellidomaterno
     */
    public String getApellidomaterno() {
        return apellidomaterno;
    }

    /**
     * @param apellidomaterno the apellidomaterno to set
     */
    public void setApellidomaterno(String apellidomaterno) {
        this.apellidomaterno = apellidomaterno;
    }

    /**
     * @return the fechanacimiento
     */
    public String getFechanacimiento() {
        return fechanacimiento;
    }

    /**
     * @param fechanacimiento the fechanacimiento to set
     */
    public void setFechanacimiento(String fechanacimiento) {
        this.fechanacimiento = fechanacimiento;
    }

    /**
     * @return the direccion
     */
    public String getDireccion() {
        return direccion;
    }

    /**
     * @param direccion the direccion to set
     */
    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    /**
     * @return the comuna
     */
    public String getComuna() {
        return comuna;
    }

    /**
     * @param comuna the comuna to set
     */
    public void setComuna(String comuna) {
        this.comuna = comuna;
    }

    /**
     * @return the telefonofijo
     */
    public String getTelefonofijo() {
        return telefonofijo;
    }

    /**
     * @param telefonofijo the telefonofijo to set
     */
    public void setTelefonofijo(String telefonofijo) {
        this.telefonofijo = telefonofijo;
    }

    /**
     * @return the telefonomovil
     */
    public String getTelefonomovil() {
        return telefonomovil;
    }

    /**
     * @param telefonomovil the telefonomovil to set
     */
    public void setTelefonomovil(String telefonomovil) {
        this.telefonomovil = telefonomovil;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the sexo
     */
    public String getSexo() {
        return sexo;
    }

    /**
     * @param sexo the sexo to set
     */
    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    /**
     * @return the subscripcion
     */
    public String[] getSubscripcion() {
        return subscripcion;
    }

    /**
     * @param subscripcion the subscripcion to set
     */
    public void setSubscripcion(String[] subscripcion) {
        this.subscripcion = subscripcion;
    }
}

这是 JSP 文件:

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>

<script src="js/jquery/jquery.maskedinput.js" type="text/javascript"></script>
<script src="js/jquery/jquery.selectbox-0.2.js" type="text/javascript"></script>

<div id="register">
    <ul><li><a href="#frm_registro"><span><s:text name="profile.register" /></span></a></li></ul>
    <div id="frm_registro">
        <s:div id="avisoError"><s:text name="profile.requiredtext" /></s:div>
        <s:form id="registro"
                action="proceso_registro" theme="css_xhtml" validate="true">
            <s:textfield name="username" key="profile.rut" labelposition="left" maxlength="50" />
            <s:password name="password" key="profile.password" labelposition="left" maxlength="50" />
            <s:textfield name="nombres" key="profile.nombres" labelposition="left" maxlength="80" size="40" />
            <s:textfield name="apellidopaterno" key="profile.apellidopaterno" labelposition="left" maxlength="80" size="40" />
            <s:textfield name="apellidomaterno" key="profile.apellidomaterno" labelposition="left" maxlength="80" size="40" />
            <s:textfield name="fechanacimiento" key="profile.fechanacimiento" labelposition="left" />
            <s:textfield name="direccion" key="profile.direccion" labelposition="left" maxlength="80" size="40" />
            <s:select name="comuna" key="profile.comuna" labelposition="left" list="#{'1':'Santiago', '2':'Huechuraba'}" headerValue="-= Seleccione Comuna =-  " headerKey="" />
            <s:textfield name="telefonofijo" key="profile.telefonofijo" labelposition="left" maxlength="30" size="30" />
            <s:textfield name="telefonomovil" key="profile.telefonomovil" labelposition="left" maxlength="30" size="30" />
            <s:textfield name="email" key="profile.email" labelposition="left" maxlength="30" size="30" />
            <s:radio name="sexo" key="profile.sexo" labelposition="left" list="#{'M':'Masculino', 'F':'Femenino'}" />
            <s:checkboxlist name="subscripcion" key="profile.subscripcion" labelposition="left" list="#{'T':'Teléfono', 'E':'E-mail', 'M':'Mensaje de Texto'}" value="T" />

            <s:submit id="boton_registro" align="left" cssClass="send" value="Registrarse" />
        </s:form>
    </div>
</div>

<script>
    $( "#register" ).tabs();
    $( "#boton_registro" ).button();
    $( "#registro_fechanacimiento" ).datepicker({
        dateFormat: "dd/mm/yy", 
        showOn: "both", 
        changeYear: true,
        changeMonth: true,
        buttonImage: "images/datepicker_icon.png",
        buttonImageOnly: true,
        buttonText: "<s:text name="AgendaPlus.choosedate" />"});
    $( "#registro_fechanacimiento" ).mask("99/99/9999");                                             
    $.mask.definitions['~']='[0-9kK]';
    $( "#registro_username" ).mask("99.999.999-~");
    $( "#registro_comuna" ).selectbox({
        effect: "fade"
    });    
    $( "#registro_telefonofijo" ).mask("(99) 9999 9999");                                             
    $( "#registro_telefonomovil" ).mask("(09) 9999 9999");                                             
</script>

这是配置 XML 文件的一部分:

    <action name="registro" class="agenda.ProfileAction" method="register">
        <result name="success" type="tiles">/register.tiles</result>
        <result name="input" type="tiles">/register.tiles</result>
    </action>        

    <action name="proceso_registro" class="agenda.ProfileAction" method="register">
        <interceptor-ref name="profiling">
            <param name="profilingKey">profilingKey</param>
        </interceptor-ref>            
        <interceptor-ref name="jsonValidationWorkflowStack"/>            
        <result name="success" type="tiles">/register.success.tiles</result>
        <result name="input" type="tiles">/register.tiles</result>
    </action>        

“registro”操作是入口点(表单),如以下 URL 所示:http ://domain.cl:8080/AgendaPlus/registro

最后,这是整个验证文件 (ProfileAction-validation.xml)

<!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="username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>Requerido</message>
        </field-validator>
        <field-validator type="rutValidator">
            <param name="trim">true</param>
            <message key="errors.short_invalid" />
        </field-validator>
    </field>
    <field name="password">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>*</message>
        </field-validator>
    </field>    
    <field name="nombres">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>*</message>
        </field-validator>
    </field>
    <field name="apellidopaterno">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>*</message>
        </field-validator>
    </field>
    <field name="fechanacimiento">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>*</message>
        </field-validator>
    </field>    
    <field name="comuna">
        <field-validator type="int">
            <param name="min">1</param>
            <message>*</message>
        </field-validator>        
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>*</message>
        </field-validator>
    </field>    
    <field name="telefonofijo">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>*</message>
        </field-validator>
    </field>    
    <field name="telefonomovil">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>*</message>
        </field-validator>
    </field>    
    <field name="email">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>*</message>
        </field-validator>
        <field-validator type="email">
            <param name="trim">true</param>
            <message key="errors.short_invalid" />
        </field-validator>        
    </field>    
    <field name="sexo">
        <field-validator type="required">
            <param name="trim">true</param>
            <message>*</message>
        </field-validator>
    </field>    
    <field name="subscripcion">
        <field-validator type="fieldexpression">
            <param name="expression"><![CDATA[#subscripcion.size() > 0]]></param>
            <message>al menos uno</message>
        </field-validator>
    </field>    
</validators>

如您所见,validation.xml 文件与 Struts2 教程中的大多数 xml 文件不同,即使我也在使用 Struts2。但是这个 XML 文件至少适用于所有字段,但我的自定义验证器、单选按钮和复选框列表除外。使用其他教程中的validation.xml 时,不起作用。

此致,

谢谢詹姆

4

1 回答 1

0

您需要使用required验证器而不是requiredstring. 验证器required检查指定字段是否不为空。

<field name="sexo">
    <field-validator type="required">
        <param name="trim">true</param>
        <message>*</message>
    </field-validator>
</field>

对于“至少一个”条件,您可以使用fieldexpression验证器。

更新

由于您subscripcion是数组,因此您需要使用length变量而不是size方法,并且#在它前面没有。

<field name="subscripcion">
    <field-validator type="fieldexpression">
        <param name="expression"><![CDATA[subscripcion.length > 0]]></param>
        <message>al menos uno</message>
    </field-validator>
</field> 
于 2013-05-08T08:08:41.800 回答