gpt4 book ai didi

java - 填充时只设置从表单到操作的最后一个参数,为什么?

转载 作者:行者123 更新时间:2023-12-01 15:00:10 27 4
gpt4 key购买 nike

这是我在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;
}
}

Struts版本:2.3.4

我需要帮助,这让我发疯,解决这个问题对我来说非常重要,如果我不能使用 struts2 方式做到这一点,我想我会使用 html 表单和 getServletRequest()。

最佳答案

嗯,我不知道为什么这种方式行不通,但我尝试过:

<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,编辑我的代码以显示颜色并使其更加清晰。

关于java - 填充时只设置从表单到操作的最后一个参数,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777225/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com