0

Struts2 アプリケーションのフォームにラジオ ボタンがあります。テキストボックス フィールドは検証できますが、ラジオ ボタン (1 つをオンにする必要があります) とチェックボックス リスト (少なくとも 1 つをオンにする必要があります) では検証できません。

このトピックについて説明しているいくつかのページをたどりましたが、解決策はどれも機能しません。

最後に、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>        

「登録」アクションは、次の 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>

ご覧のとおり、Struts2 を使用している場合でも、validation.xml ファイルは Struts2 チュートリアルにあるほとんどの xml とは異なります。しかし、この XML ファイルは少なくともすべてのフィールドで機能しますが、カスタム バリデータ、ラジオ ボタン、およびチェックボックス リストは除きます。他のチュートリアルの validation.xml を使用すると、何も機能しません。

よろしくお願いします、

ありがとうハイメ

4

1 に答える 1

0

requiredの代わりにバリデーターを使用する必要がありますrequiredstring。バリデーターはrequired、指定されたフィールドが null でないかどうかをチェックします。

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

「少なくとも1つ」の条件では、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 に答える