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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top