0

これは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の方法を使用してそれを行うことができない場合、これを解決することは私にとって非常に重要です。

4

1 に答える 1

1

まあ、なぜそのように機能しないのかわかりませんが、私はこれを試しました:

<label for="contactoModif.nombre">Nombre</label><br/>
<input type="text" class="large" name="contactoModif.nombre" value="<s:property value="contactoEditar.nombre"/>"/>

アクションで:

public ContactoPerfil getContactoModif(){
    return contactoModif;
}

フォームのすべてのフィールドを受け取り、すべてがオブジェクトに格納されています。フィールドを変更して「get」メソッドを追加しただけです(フォームから値を取得するには「set」メソッドだけが必要だと思いました)。残りのコードは同じです。

PS: MohanaRao SV に感謝します。コードを編集して色を表示し、より明確にしました。

于 2012-12-08T16:14:21.993 に答える