Pessoal, acredito que seja um problema simples, mas não faço ideia de como resolver ja tentei de tudo.
Tenho os seguintes modelos:
Usuarios
package MZSuporte.model;
import java.io.Serializable;
import javax.persistence.*;
@Entity
public class Usuarios implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
@Column(name = "nome", nullable = false, length = 40)
private String nome;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@PrimaryKeyJoinColumn
@JoinColumn(name = "area", nullable = false)
private Area area;
@Column(name = "ramal", nullable = true, length = 4)
private String ramal;
@Column(name = "baia", nullable = true, length = 4)
private String baia;
//getters & setters
Area
package MZSuporte.model;
import javax.persistence.*;
@Entity
public class Area implements java.io.Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
@Column(name = "nome", nullable = false, length = 20)
private String nome;
@Column(name = "area", nullable = true, length = 2)
private Integer area;
// getters & setters
e o seguinte jsp com o formulario para criar um novo usuario
<%@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">
<c:forEach var="narea" items="${narea}">
<html:option value="${narea.id}">${narea.nome}</html:option>
</c:forEach>
</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>
Antes no meu modelo usuarios a area era apenas uma string esse trecho funcionava perfeitamente:
<td><html:select property="user.area">
<c:forEach var="narea" items="${narea}">
<html:option value="${narea.id}">${narea.nome}</html:option>
</c:forEach>
</html:select></td>
Agora que a area eh um outro objeto tento popular mudando o property para "user.area.id" e ele não aceita, quando acessa a pagina ele retorna JasperException e como root cause org.apache.commons.beanutils.NestedNullException: Null property value for 'area.id' on bean class 'class MZSuporte.model.Usuarios'.
Segue o erro completo:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /admin/new/newUser.jsp at line 20
17:
18:
19:
20:
21:
22:
23:
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
root cause
org.apache.commons.beanutils.NestedNullException: Null property value for 'area.id' on bean class 'class MZSuporte.model.Usuarios'
org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:747)
org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
org.apache.commons.beanutils.BeanUtilsBean.getArrayProperty(BeanUtilsBean.java:542)
org.apache.commons.beanutils.BeanUtils.getArrayProperty(BeanUtils.java:211)
org.apache.struts.taglib.html.SelectTag.calculateMatchValues(SelectTag.java:248)
org.apache.struts.taglib.html.SelectTag.doStartTag(SelectTag.java:200)
org.apache.jsp.admin.new_.newUser_jsp._jspx_meth_html_005fselect_005f0(newUser_jsp.java:253)
org.apache.jsp.admin.new_.newUser_jsp._jspx_meth_html_005fform_005f0(newUser_jsp.java:173)
org.apache.jsp.admin.new_.newUser_jsp._jspx_meth_html_005fhtml_005f0(newUser_jsp.java:121)
org.apache.jsp.admin.new_.newUser_jsp._jspService(newUser_jsp.java:88)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390).
Como eu devo referenciar a area nesse caso??
Obrigado
Att,
Vinicius Roberto