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 を使用すると、何も機能しません。
よろしくお願いします、
ありがとうハイメ