<html:select>

1 resposta
vinicius_roc

Pessoal tenho o seguinte formulario:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html:html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>MZ TI - Suporte</title>
    </head>
    <body>
        <h1 align="center">Novo Usuario</h1>
        <html:form action="altUser.do" focus="user.nome">
            <table border="0">
                <tr>
                    <td><b>Nome: </b></td>
                    <td><html:text value="${user.nome}" property="user.nome" size="32"/></td>
                </tr>
                <tr>
                    <td><b>Area: </b></td>
                    <td><html:select property="user.area.id">
                                <html:options collection="narea" property="id" labelProperty="nome" />
                    </html:select></td>
                </tr>
                <tr>
                    <td><b>Ramal: </b></td>
                    <td><html:text size="3" value="${user.ramal}" property="user.ramal"/><html:errors property=""/></td>
                </tr>
                <tr>
                    <td><b>Baia: </b></td>
                    <td><html:text size="2" value="${user.baia}" property="user.baia"/></td>
                </tr>
            </table>
            <html:hidden value="${createuser.acao}" property="acao"/>
            <html:hidden value="${user.id}" property="user.id"/>
            <html:submit value="Cadastrar" property="btenviar"/>
        </html:form>
        <p>
            <font size="-2" color="red">
                <b><html:errors/></b>
            </font>
        </p>
    </body>
</html:html>

Aparentemente esta tudo certo, porem nesse trecho:

<tr>
                    <td><b>Area: </b></td>
                    <td><html:select property="user.area.id">
                                <html:options collection="narea" property="id" labelProperty="nome" />
                    </html:select></td>
                </tr>

ele diz isso quando tento acessar o formulario:

org.apache.commons.beanutils.NestedNullException: Null property value for 'user.area.id' on bean class 'class form.NewUserForm'

segue o codigo das classes envolvidas.

Formulario

package form;

import MZSuporte.dao.DaoFactory;
import MZSuporte.model.Usuarios;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;

public class NewUserForm extends ActionForm {

    private Usuarios user;   
    private String btenviar;
    private String acao;

   public void setUser(Usuarios user) {
        this.user = user;
    }

    public Usuarios getUser() {        
        return user;
    }

    public String getAcao() {
        return acao;
    }

    public void setAcao(String acao) {
        this.acao = acao;
    }

    public String getBtenviar() {
        return btenviar;
    }

    public void setBtenviar(String btenviar) {
        if (btenviar.equals("Alterar")) {
            this.acao = btenviar;
        }
        if (btenviar.equals("Excluir")) {
            this.acao = btenviar;
        }
        this.btenviar = btenviar;
    }

    @Override
    public ActionErrors validate(ActionMapping action, HttpServletRequest request) {

        ActionErrors erros = new ActionErrors();

        if (this.btenviar.equals("Alterar") || this.btenviar.equals("Excluir")) {
            try{            
            DaoFactory dao = new DaoFactory();
            this.user = dao.getUsuariosDAO().read(this.user.getId());
            } catch (SQLException e){
                System.out.println(e.getMessage());
            }

        } else {
            if (this.user.getNome() == null || this.user.getNome().equals("")) {
                erros.add("nome", new ActionMessage("erro.campoNome"));
            }
            if (this.user.getRamal() != null || this.user.getRamal().equals("")) {
                if (!isNumber(user.getRamal())) {
                    erros.add("ramal", new ActionMessage("erro.campoRamal"));
                }
            }

            if (this.user.getBaia() != null || user.getBaia().equals("")) {
                if (!isNumber(user.getBaia())) {
                    erros.add("baia", new ActionMessage("erro.campoBaia"));
                }
            }
        }

        return erros;
    }

    public Boolean isNumber(String id) {
        try {
            int n = Integer.parseInt(id);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

Usuarios

package MZSuporte.model;

import java.io.Serializable;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name = "usuarios")
public class Usuarios implements Serializable {

    @Id
    private String id;

    @Column(nullable = false)
    private String nome;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "area")    
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Area area;

    private String ramal;
    
    private String baia;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Area getArea() {
        return area;
    }

    public void setArea(Area area) {
        this.area = area;
    }

    public String getRamal() {
        return ramal;
    }

    public void setRamal(String ramal) {
        this.ramal = ramal;
    }

    public String getBaia() {
        return baia;
    }

    public void setBaia(String baia) {
        this.baia = baia;
    }
}

E Area:

package MZSuporte.model;

import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
@Table(name = "area")
public class Area implements java.io.Serializable {

    @Id    
    private String id;

    @Column(name = "nome", nullable = true, length = 20)
    private String nome;

    @Column(name = "area", nullable = true, length = 2)
    private Integer area;

    @OneToMany(mappedBy="area", fetch = FetchType.LAZY)
    @Cascade(CascadeType.ALL)
    private Collection<Usuarios> usuarios;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getArea() {
        return area;
    }

    public void setArea(int area) {
        this.area = area;
    }

    public Collection<Usuarios> getUsuarios() {
        return usuarios;
    }

    public void setUsuarios(ArrayList<Usuarios> usuarios) {
        this.usuarios = usuarios;
    }
}

Como devo colocar no para não da mais esse erro e eu conseguir acessar o formulario??

Agradeço desde ja

1 Resposta

vinicius_roc

Alguem sabe como posso fazer para solucionar esse problema???

Não tenho mais ideia =/

E falta só esse detalhe para terminar a estrutura do meu projeto.

Obrigado

Criado 1 de julho de 2009
Ultima resposta 1 de jul. de 2009
Respostas 1
Participantes 1