【问题标题】:Showing object information in JSP page在 JSP 页面中显示对象信息
【发布时间】:2017-07-01 17:07:54
【问题描述】:

我正在尝试使用 Spring MVC 做一个 Web 应用程序,但当我尝试用对象信息填充 JSP 页面时遇到了困难:

我有一个类 Pessoa(“人”):

@Entity
public class Pessoa {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int idPessoa;
    private String nome;
    private int rg;
    private TipoEstado rgEstado;
    private int cpf;
    @DateTimeFormat
    private Calendar dataNascimento;
    private String profissao;
    private String nomePai;
    private String nomeMae;
    private TipoEstadoCivil estadoCivil; //enum
    private TipoSituacao situacao; 

    @OneToOne(cascade=CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name="idEndereco")
    private Endereco endereco;

    @OneToMany(mappedBy = "pessoa", targetEntity = ContaCorretora.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<ContaCorretora> contaCorretora;

    @OneToMany(mappedBy = "pessoa", targetEntity = Telefone.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<Telefone> telefone;

    @OneToOne(cascade=CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name="idContaBancaria")
    private ContaBancaria contaBancaria;

    @OneToOne(cascade=CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name="email")
    private Usuario usuario;

控制器方法:

@RequestMapping("/listarPessoa/{id}") 
public ModelAndView listarPessoa(@PathVariable("id") int id) {
    ModelAndView modelAndView = new ModelAndView("pessoa/listaespecifica");
    Pessoa pessoa = pessoaDao.find(id);
    modelAndView.addObject("pessoa",pessoa);
    return modelAndView;
}

PessoaDAO 方法:

public Pessoa find(int id) {        
    return manager.createQuery("select p from Pessoa as p where p.idPessoa = :id", Pessoa.class)
            .setParameter("id", id).getSingleResult();
}

主要问题是当属性有关系时,我无法在.JSP 页面中显示信息。当我放置没有关系的属性时,它工作正常!

例如:

上面的代码有效:

<tr>
    <td><b>RG</b></td>
    <td>${pessoa.rg }</td>
</tr>

当我这样放代码时,不起作用:(“Endereco”就像“地址”,在这种情况下是与pessoa的OnetoOne关系,“logradouro”是Endereco的一个属性”。然后,这段代码以上不起作用:

<tr>
    <td><b>Endereco</b></td>
    <td>${pessoa.endereco.logradouro }</td>
</tr>

这是错误:

**type Exception report
message An exception occurred processing JSP page /WEB-INF/views/pessoa/listaespecifica.jsp at line 69
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 /WEB-INF/views/pessoa/listaespecifica.jsp at line 69
66:     </tr>
67:     <tr>
68:             <td><b>Endereco</b></td>
69:             <td>${pessoa.endereco.logradouro }</td>
70: 
71: 
72:     </tr>**

【问题讨论】:

    标签: java html spring jsp spring-mvc


    【解决方案1】:

    将 Endereco endereco 的 fetch 类型更改为 eager。像这样

    @OneToOne(cascade=CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name="idEndereco")
    private Endereco endereco;
    

    【讨论】: