2013-05-08 3 views
0

J'ai un bouton radio dans un formulaire dans une application Struts2. Je peux valider les champs de la zone de texte, mais je ne peux pas le faire pour un bouton radio (il faut le vérifier) ​​et pour une checkbox (au moins un doit être coché).Comment valider les boutons radio dans Struts2

J'ai suivi quelques pages sur le sujet mais aucune des solutions ne fonctionne.

Enfin j'ai ce dans le fichier XML:

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

Toute aide sera grandement appréciée.

Ajouté:

Ceci est la classe d'action: (n'importe si aucune validation code lié existe?)

/* 
* 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; 
    } 
} 

Ceci est le fichier 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> 

Cela fait partie du fichier XML de configuration:

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

L'action "registro" est le point d'entrée (la forme), comme cette URL montre: http://domain.cl:8080/AgendaPlus/registro

Et enfin, c'est l'ensemble du fichier de validation (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> 

Comme vous le voyez, ce fichier validation.xml est différent de la plupart des xml présents dans les tutoriels de Struts2, même lorsque j'utilise Struts2. Mais ce fichier XML fonctionne au moins pour tous les champs mais pour mon validateur personnalisé, les boutons radio et la liste de cases à cocher. Lors de l'utilisation de validation.xml d'autres didacticiels, ne fonctionne pas.

Meilleures salutations,

Merci Jaime

+0

POSSIBLE DE DUPLICATE http://stackoverflow.com/questions/6242590/validation-to-a-radio-list-in-struts-2 – sunleo

+0

Oui ... il est dupliqué, mais j'ai déjà lu la solution là-bas, j'ai suivi l'exemple, mais cela n'a pas fonctionné. Il ne valide rien, alors que la façon dont j'ai implémenté, valide tout sauf les boutons radio et les cases à cocher. Le lien avec un didacticiel pointé dans le lien de message que vous avez publié utilise une syntaxe XML très distincte pour le fichier validator.xml. – jstuardo

+0

@jstuardo: Pourriez-vous publier votre action et votre page JSP? –

Répondre

0

Vous devez utiliser required validateur au lieu de requiredstring. Le validateur required vérifie si le champ spécifié n'est pas nul.

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

Et pour "au moins une" condition que vous pouvez utiliser fieldexpression validateur.

Mise à jour

Depuis votre subscripcion est un tableau, vous devez utiliser length méthode variable ne size et w/o # devant elle.

<field name="subscripcion"> 
    <field-validator type="fieldexpression"> 
     <param name="expression"><![CDATA[subscripcion.length > 0]]></param> 
     <message>al menos uno</message> 
    </field-validator> 
</field> 
+0

Bonjour ... pour la radio, ça ne marche pas non plus ... J'ai ceci défini: . Pour checkboxlist, j'ai cette expression: 0]]> où #subscripcion est défini comme et ça ne marche pas. – jstuardo

+0

@jstuardo: Mise à jour ma réponse. Et pour vous cas 'requiredstring' devrait fonctionner aussi pour le bouton radio. –