これはjspの私のフォームです。送信すると、サーバーログにすべてのパラメータとその値が表示されますが、オブジェクトの println を実行すると、最後のパラメータ (アルファベット順) だけが設定されました。
<s:form action="contactos-modificar" method="POST" name="editarContacto">
<s:hidden name="contactoModif.id" value="%{contactoEditar.id}"/>
<div id="top">
<label for="contactoModif.nombre">Nombre</label><br/>
<s:textfield cssClass="large" name="contactoModif.nombre" value="%{contactoEditar.nombre}" />
</div>
<div id="izq">
<label for="contactoModif.lugarNac">Lugar de nacimiento</label><br/>
<s:textfield cssClass="large" name="contactoModif.lugarNac" value="%{contactoEditar.lugarNac}" />
<br/>
<label for="contactoModif.empresa">Empresa</label><br/>
<s:textfield cssClass="large" name="contactoModif.empresa" value="%{contactoEditar.empresa}"/>
<br/>
<label for="localizacion">Localización</label><br/>
<s:textfield cssClass="large" name="contactoModif.localizacion" value="%{contactoEditar.localizacion}"/>
</div>
<div id="dcha">
<label for="contactoModif.fechaNac">Fecha de nacimiento</label><br/>
<s:textfield cssClass="large" name="contactoModif.fechaNac" value="%{contactoEditar.fechaNac}"/>
</br>
<label for="contactoModif.puesto">Puesto</label><br/>
<s:textfield cssClass="large" name="contactoModif.puesto" value="%{contactoEditar.puesto}"/>
<br/>
<label for="contactoModif.direccion">Dirección</label><br/>
<s:textarea cssClass="direccion" name="contactoModif.direccion"><s:property value="contactoEditar.direccion"/></s:textarea>
</div>
<div id="bot">
<label for="contactoModif.notas">Notas</label><br/>
<s:textarea cssClass="notas" name="contactoModif.notas"><s:property value="contactoEditar.notas"/></s:textarea>
<br/>
<s:submit cssClass="submit" value="Guardar cambios"/>
</div>
サーバーログ:
2012-12-08 12:39:42,148 DEBUG com.opensymphony.xwork2.interceptor.I18nInterceptor.debug:68 - intercept '//contactos-modificar' {
2012-12-08 12:39:42,149 DEBUG com.opensymphony.xwork2.interceptor.I18nInterceptor.debug:68 - applied invocation context locale=es_ES
2012-12-08 12:39:42,150 DEBUG com.opensymphony.xwork2.interceptor.I18nInterceptor.debug:68 - before Locale=es_ES
2012-12-08 12:39:42,181 DEBUG com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.debug:68 - Entering nullPropertyValue [target=[org.letter.ltr.action.ContactosAction@17805ad, com.opensymphony.xwork2.DefaultTextProvider@c6ede2], property=struts]
2012-12-08 12:39:42,184 DEBUG com.opensymphony.xwork2.util.LocalizedTextUtil.debug:68 - Resource bundles reloaded
2012-12-08 12:39:42,188 DEBUG org.apache.struts2.interceptor.FileUploadInterceptor.debug:68 - Bypassing //contactos-modificar
2012-12-08 12:39:42,188 DEBUG com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.debug:68 - Setting static parameters {}
2012-12-08 12:39:42,189 DEBUG com.opensymphony.xwork2.interceptor.ParametersInterceptor.debug:68 - Setting params NONE
2012-12-08 12:39:42,189 DEBUG com.opensymphony.xwork2.interceptor.ParametersInterceptor.debug:68 - Setting params contactoModif.direccion => [ fffffff ] contactoModif.empresa => [ ccccccc ] contactoModif.fechaNac => [ 11-11-1111 ] contactoModif.id => [ 124 ] contactoModif.localizacion => [ dddddd ] contactoModif.lugarNac => [ bbbbbb ] contactoModif.nombre => [ aaaaaa ] contactoModif.notas => [ ggggggg ] contactoModif.puesto => [ eeeeeee ]
2012-12-08 12:39:42,189 DEBUG com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.debug:68 - Entering nullPropertyValue [target=[org.letter.ltr.action.ContactosAction@17805ad, com.opensymphony.xwork2.DefaultTextProvider@c6ede2], property=contactoModif]
2012-12-08 12:39:42,190 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Property: direccion
2012-12-08 12:39:42,190 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Class: org.letter.ltr.model.ContactoPerfil
2012-12-08 12:39:42,191 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - field-level type converter for property [direccion] = none found
2012-12-08 12:39:42,191 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - global-level type converter for property [direccion] = none found
2012-12-08 12:39:42,192 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - falling back to default type converter [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@78e377]
2012-12-08 12:39:42,192 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Creating converter with name [string]
2012-12-08 12:39:42,193 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Converter of Type [com.opensymphony.xwork2.conversion.impl.StringConverter] with name [string], created!
2012-12-08 12:39:42,193 DEBUG com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.debug:68 - Entering nullPropertyValue [target=[org.letter.ltr.action.ContactosAction@17805ad, com.opensymphony.xwork2.DefaultTextProvider@c6ede2], property=contactoModif]
2012-12-08 12:39:42,262 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Property: empresa
2012-12-08 12:39:42,263 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Class: org.letter.ltr.model.ContactoPerfil
2012-12-08 12:39:42,263 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - field-level type converter for property [empresa] = none found
2012-12-08 12:39:42,264 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - global-level type converter for property [empresa] = none found
2012-12-08 12:39:42,264 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - falling back to default type converter [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@78e377]
2012-12-08 12:39:42,265 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Creating converter with name [string]
2012-12-08 12:39:42,266 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Converter of Type [com.opensymphony.xwork2.conversion.impl.StringConverter] with name [string], created!
2012-12-08 12:39:42,267 DEBUG com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.debug:68 - Entering nullPropertyValue [target=[org.letter.ltr.action.ContactosAction@17805ad, com.opensymphony.xwork2.DefaultTextProvider@c6ede2], property=contactoModif]
2012-12-08 12:39:42,268 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Property: fechaNac
2012-12-08 12:39:42,268 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Class: org.letter.ltr.model.ContactoPerfil
2012-12-08 12:39:42,269 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - field-level type converter for property [fechaNac] = none found
2012-12-08 12:39:42,269 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - global-level type converter for property [fechaNac] = none found
2012-12-08 12:39:42,269 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - falling back to default type converter [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@78e377]
2012-12-08 12:39:42,270 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Creating converter with name [string]
2012-12-08 12:39:42,270 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Converter of Type [com.opensymphony.xwork2.conversion.impl.StringConverter] with name [string], created!
2012-12-08 12:39:42,271 DEBUG com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.debug:68 - Entering nullPropertyValue [target=[org.letter.ltr.action.ContactosAction@17805ad, com.opensymphony.xwork2.DefaultTextProvider@c6ede2], property=contactoModif]
2012-12-08 12:39:42,272 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Property: id
2012-12-08 12:39:42,272 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Class: org.letter.ltr.model.ContactoPerfil
2012-12-08 12:39:42,273 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - field-level type converter for property [id] = none found
2012-12-08 12:39:42,273 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - global-level type converter for property [id] = none found
2012-12-08 12:39:42,274 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - falling back to default type converter [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@78e377]
2012-12-08 12:39:42,274 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Creating converter with name [number]
2012-12-08 12:39:42,275 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Converter of Type [com.opensymphony.xwork2.conversion.impl.NumberConverter] with name [number], created!
2012-12-08 12:39:42,275 DEBUG com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.debug:68 - Entering nullPropertyValue [target=[org.letter.ltr.action.ContactosAction@17805ad, com.opensymphony.xwork2.DefaultTextProvider@c6ede2], property=contactoModif]
2012-12-08 12:39:42,276 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Property: localizacion
2012-12-08 12:39:42,329 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Class: org.letter.ltr.model.ContactoPerfil
2012-12-08 12:39:42,329 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - field-level type converter for property [localizacion] = none found
2012-12-08 12:39:42,330 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - global-level type converter for property [localizacion] = none found
2012-12-08 12:39:42,331 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - falling back to default type converter [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@78e377]
2012-12-08 12:39:42,331 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Creating converter with name [string]
2012-12-08 12:39:42,331 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Converter of Type [com.opensymphony.xwork2.conversion.impl.StringConverter] with name [string], created!
2012-12-08 12:39:42,333 DEBUG com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.debug:68 - Entering nullPropertyValue [target=[org.letter.ltr.action.ContactosAction@17805ad, com.opensymphony.xwork2.DefaultTextProvider@c6ede2], property=contactoModif]
2012-12-08 12:39:42,334 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Property: lugarNac
2012-12-08 12:39:42,334 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Class: org.letter.ltr.model.ContactoPerfil
2012-12-08 12:39:42,335 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - field-level type converter for property [lugarNac] = none found
2012-12-08 12:39:42,335 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - global-level type converter for property [lugarNac] = none found
2012-12-08 12:39:42,336 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - falling back to default type converter [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@78e377]
2012-12-08 12:39:42,337 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Creating converter with name [string]
2012-12-08 12:39:42,337 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Converter of Type [com.opensymphony.xwork2.conversion.impl.StringConverter] with name [string], created!
2012-12-08 12:39:42,338 DEBUG com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.debug:68 - Entering nullPropertyValue [target=[org.letter.ltr.action.ContactosAction@17805ad, com.opensymphony.xwork2.DefaultTextProvider@c6ede2], property=contactoModif]
2012-12-08 12:39:42,338 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Property: nombre
2012-12-08 12:39:42,339 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Class: org.letter.ltr.model.ContactoPerfil
2012-12-08 12:39:42,339 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - field-level type converter for property [nombre] = none found
2012-12-08 12:39:42,340 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - global-level type converter for property [nombre] = none found
2012-12-08 12:39:42,340 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - falling back to default type converter [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@78e377]
2012-12-08 12:39:42,341 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Creating converter with name [string]
2012-12-08 12:39:42,341 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Converter of Type [com.opensymphony.xwork2.conversion.impl.StringConverter] with name [string], created!
2012-12-08 12:39:42,342 DEBUG com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.debug:68 - Entering nullPropertyValue [target=[org.letter.ltr.action.ContactosAction@17805ad, com.opensymphony.xwork2.DefaultTextProvider@c6ede2], property=contactoModif]
2012-12-08 12:39:42,343 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Property: notas
2012-12-08 12:39:42,343 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Class: org.letter.ltr.model.ContactoPerfil
2012-12-08 12:39:42,395 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - field-level type converter for property [notas] = none found
2012-12-08 12:39:42,395 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - global-level type converter for property [notas] = none found
2012-12-08 12:39:42,396 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - falling back to default type converter [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@78e377]
2012-12-08 12:39:42,397 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Creating converter with name [string]
2012-12-08 12:39:42,397 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Converter of Type [com.opensymphony.xwork2.conversion.impl.StringConverter] with name [string], created!
2012-12-08 12:39:42,398 DEBUG com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.debug:68 - Entering nullPropertyValue [target=[org.letter.ltr.action.ContactosAction@17805ad, com.opensymphony.xwork2.DefaultTextProvider@c6ede2], property=contactoModif]
2012-12-08 12:39:42,399 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Property: puesto
2012-12-08 12:39:42,400 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - Class: org.letter.ltr.model.ContactoPerfil
2012-12-08 12:39:42,400 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - field-level type converter for property [puesto] = none found
2012-12-08 12:39:42,401 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - global-level type converter for property [puesto] = none found
2012-12-08 12:39:42,401 DEBUG com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:68 - falling back to default type converter [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@78e377]
2012-12-08 12:39:42,402 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Creating converter with name [string]
2012-12-08 12:39:42,402 DEBUG com.opensymphony.xwork2.ObjectFactory.debug:68 - Converter of Type [com.opensymphony.xwork2.conversion.impl.StringConverter] with name [string], created!
2012-12-08 12:39:42,404 DEBUG org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.debug:68 - Validating //contactos-modificar with method modificarContacto.
2012-12-08 12:39:42,424 DEBUG com.opensymphony.xwork2.validator.ValidationInterceptor.debug:68 - Invoking validate() on action org.letter.ltr.action.ContactosAction@17805ad
2012-12-08 12:39:42,425 DEBUG com.opensymphony.xwork2.interceptor.PrefixMethodInvocationUtil.debug:68 - cannot find method [validateModificarContacto] in action [org.letter.ltr.action.ContactosAction@17805ad]
2012-12-08 12:39:42,425 DEBUG com.opensymphony.xwork2.interceptor.PrefixMethodInvocationUtil.debug:68 - cannot find method [validateDoModificarContacto] in action [org.letter.ltr.action.ContactosAction@17805ad]
2012-12-08 12:39:42,426 DEBUG com.opensymphony.xwork2.DefaultActionInvocation.debug:68 - Executing action method = modificarContacto
「contactoModif.puesto」だけをオブジェクトに設定しました。他のものは空です。
これは私のオブジェクトです:
public class ContactoPerfil {
private static final long serialVersionUID = 1L;
private int id=0;
private String nombre="";
private String fechaNac="";
private String lugarNac="";
private String empresa="";
private String puesto="";
private String direccion="";
private String localizacion="";
private String notas="";
public int getId(){
return id;
}
public String getNombre(){
return nombre;
}
public String getFechaNac(){
return fechaNac;
}
public String getLugarNac(){
return lugarNac;
}
public String getEmpresa(){
return empresa;
}
public String getPuesto(){
return puesto;
}
public String getDireccion(){
return direccion;
}
public String getLocalizacion(){
return localizacion;
}
public String getNotas(){
return notas;
}
public void setId(int id){
this.id = id;
}
public void setNombre(String nombre){
this.nombre = nombre;
}
public void setFechaNac(String fechaNac){
this.fechaNac = fechaNac;
}
public void setLugarNac(String lugarNac){
this.lugarNac = lugarNac;
}
public void setEmpresa(String empresa){
this.empresa = empresa;
}
public void setPuesto(String puesto){
this.puesto = puesto;
}
public void setDireccion(String direccion){
this.direccion = direccion;
}
public void setLocalizacion(String localizacion){
this.localizacion = localizacion;
}
public void setNotas(String notas){
this.notas = notas;
}
@Override
public String toString(){
//code
}
}
「contactoModif.nombre」、「contactoModif.empresa」、「contactoModif.lugarNac」を試してみたところ、同じことが起こりました。「contactoModif.nombre」だけが設定されていました(struts2によって最後に変換されたものであるため、アルファベット順で最後のものです)。
アクションで:
public class ContactosAction extends ActionSupport implements SessionAware,ServletRequestAware{
private ContactoPerfil contactoModif;
@Action(value="contactos-modificar",
results={
@Result(name="success", type="stream", params={"contentType","text/html","inputName","inputStream"}),
@Result(name="error", type="stream", params={"contentType","text/html","inputName","inputStream"})}
)
public String modificarContacto() throws Exception{
//code
}
public void setContactoModif(ContactoPerfil c){
this.contactoModif=c;
}
}
ストラット バージョン: 2.3.4
私は助けが必要です、それは私を夢中にさせています、私がhtmlフォームとgetServletRequest()を使用すると思われるstruts2の方法を使用してそれを行うことができない場合、これを解決することは私にとって非常に重要です。