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
Agradeço desde ja