Escritura de una propiedad de cadena de un objeto con
-
03-10-2019 - |
Pregunta
Tengo un objeto en mi formulario que contiene varias propiedades de cadena.
Cuando quiero imprimirlo en mi forma de JSP que podría hacerlo con
<c:out value="${form.company.address}" />
, que funciona a la perfección.
Ahora quiero crear un campo de entrada HTML. Pero cuando escribo
<html:text property="company.address" />
me sale un error que dice
Caused by: javax.servlet.jsp.JspException: No getter method for property company.address of bean org.apache.struts.taglib.html.BEAN
¿Sabe usted cómo puedo crear un campo de entrada HTML con la dirección de mi empresa?
Mis del frijol consiguieron los captadores y definidores correspondientes necesarias.
Solución
La forma correcta de la traducción de este:
<c:out value="${UFForm.company.address}" />
a Struts es decir,
<html:text name="UFForm" property="company.address">
Esto significa que hay una solicitud con el nombre UFForm
con un grano que contiene una getCompany()
método (que estoy suponiendo que devuelve un objeto Company
) y que a su vez tiene un captador getAddress()
(si se entiende lo que quiero decir). En pocas palabras, el grano de solicitud / sesión UFForm
, la TagLib está accediendo getCompany().getAddress()
;
PS esperanza de que getAddress()
no devuelve un nula <html:text />
otra cosa será una excepción.
Editar Para explicar lo que hice anteriormente:
public class Company implements Serializable {
private String address;
//Setter
public void setAddress(String address) {
this.address = address;
}
//Getter
public String getAddress() { return this.address; }
}
public class UFForm implements Serializable {
private Company company;
public void setCompany(Company company) {
this.company = company;
}
public void getCompany() {
if (this.company == null) {
setCompany(new Company());
}
return this.company;
}
}
Lo que hice anteriormente en <html:text />
es equivalente a
UFForm ufForm = ....;
String property = ufForm.getCompany().getAddress();
Otros consejos
Su frijol debería haber métodos setter y getter correspondiente.
formulario HTML
<html:text property="name" size="10" maxlength="10">
frijol correspondiente.
public class AddressForm
{
private String name=null;
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
}
Cuando recibe el valor del cuadro de texto con:
<html:text property="company.address" />
Usted está de hecho diciendo a Struts hacer:
formObject.getCompany().getAddress();
Así que usted debe tener un comprador para la compañía (que no debe volver nulo o la siguiente operación fallará) y un regulador para la dirección en el objeto social. Los setters / captadores deben ser públicas. Esto ya debe ser el caso ya que se puede hacer lo siguiente con ningún error:
<c:out value="${UFForm.company.address}" />
Ahora, lo que me molesta es esta parte: ${UFForm.
. Cuando se utiliza JSTL Usted está accediendo a la forma explícita. Con la <html:text>
se accede a una propiedad en la forma implícita. Esta forma implícita es proporcionado por la etiqueta de encerramiento <html:form>
. ¿Tiene el <html:text>
dentro de un <html:form>
?
El bean de formulario se encuentra / creado / expuesta basada en la especificación para la forma de grano ActionMapping
asociada a fin de comprobar su mapeo también.