Boa tarde, tenho o seguinte problema. Minha classe ClienteFisico possui dentro dela uma outra classe como atributo chamada Endereco. como faço para poder popular os atributos da classe endereço? segue meu controller, os 2 models citados, e o JSP. Estou utilizando bootstrap então talvez o jsp pareça grande demais, desculpem.
Controller:
@RequestMapping(value="/cliente-fisico",method=RequestMethod.GET)
public ModelAndView getFisico(ClienteFisico cliente,Endereco endereco){
ModelAndView modelAndView = new ModelAndView("/registros/clientes/fisico");
cliente.setEndereco(endereco);
modelAndView.addObject("cliente",cliente);
return modelAndView;
}
@RequestMapping(value="/cliente-fisico",method=RequestMethod.POST)
public ModelAndView formFisico(ClienteFisico cliente){
ModelAndView modelAndView = new ModelAndView("redirect:/registros/clientes");
System.out.println(cliente);
return modelAndView;
}
form da jsp:
<form:form action="${s.mvcUrl('CC#formFisico').build() }"
modelAttribute="cliente" method="POST">
<div class="form-group">
<label for="name" class="col-sm-3 control-label">Nome</label>
<div class="col-sm-9">
<form:input type='text' id="name" placeholder="Nome Completo"
class="form-control" path='nome' />
</div>
</div>
<div class="form-group">
<label for="cpf" class="col-sm-3 control-label">CPF</label>
<div class="col-sm-9">
<form:input type="text" id="cpf"
placeholder="Digite somente os numeros do CPF"
class="form-control" path="cpf" />
</div>
</div>
<div class="form-group">
<label for="password" class="col-sm-3 control-label">Site</label>
<div class="col-sm-9">
<form:input path="site" type="text" id="Site"
placeholder="http://" class="form-control" />
</div>
</div>
<div class="form-group">
<label for="cadMap" class="col-sm-3 control-label">Nº Cad.
Mapa</label>
<div class="col-sm-9">
<form:input path="cadMap" type="text" id="cadMap"
class="form-control" />
</div>
</div>
<div class="form-group">
<label for="vencProcuracao" class="col-sm-3 control-label">Vencimento
Procuração</label>
<div class="col-sm-9">
<form:input path="validadeProcuracao" type="date"
id="vencProcuracao" class="form-control" />
</div>
<div class="form-group">
<label for="vencRadar" class="col-sm-3 control-label">Vencimento
Radar</label>
<div class="col-sm-9">
<form:input path="validadeRadar" type="date" id="vencRadar"
class="form-control" />
</div>
</div>
<div class="form-group">
<label for="cadMap" class="col-sm-3 control-label">Nº
Cad. Map</label>
<div class="col-sm-9">
<form:input path="cadMap" type="text" id="cadMap"
class="form-control" />
</div>
<div class="form-group">
<label for="endereco.bairro" class="col-sm-3 control-label">Bairro</label>
<div class="col-sm-9">
<form:input path="endereco.bairro" type="text" id="bairro"
class="form-control" />
</div>
</div>
<!-- /.form-group -->
<div class="form-group">
<div class="col-sm-9 col-sm-offset-3">
<button type="submit" class="btn btn-primary btn-block">Register</button>
</div>
</div>
</div>
<!-- ./container -->
</form:form>
@Entity
public class ClienteFisico {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
private String nome;
private String cpf;
@OneToOne(fetch = FetchType.EAGER)
@NotNull
private Endereco endereco;
private String cadMap;
private String site;
private String pathLogo;
@Temporal(TemporalType.DATE)
private Calendar validadeProcuracao;
@Temporal(TemporalType.DATE)
private Calendar validadeRadar;
@OneToMany
private List<Usuario> usuarios = new ArrayList<>();
@OneToMany
private List<ContaBancaria> contas = new ArrayList<>();
@ElementCollection
private List<String> telefones = new ArrayList<>();
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
if(Validador.isValidCPF(cpf)){
this.cpf = cpf;
}else{
throw new IllegalArgumentException("CPF Invalido!");
}
}
public Calendar getValidadeProcuracao() {
return validadeProcuracao;
}
public void setValidadeProcuracao(Calendar validadeProcuracao) {
this.validadeProcuracao = validadeProcuracao;
}
public Calendar getValidadeRadar() {
return validadeRadar;
}
public void setValidadeRadar(Calendar validadeRadar) {
this.validadeRadar = validadeRadar;
}
public String getSite() {
return site;
}
public void setSite(String site) {
this.site = site;
}
public String getPathLogo() {
return pathLogo;
}
public void setPathLogo(String pathLogo) {
if(pathLogo.contains("/")){
throw new IllegalArgumentException("Nome do Logo não pode conter /");
}
this.pathLogo = pathLogo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Usuario> getUsuario() {
return Collections.unmodifiableList(usuarios);
}
public void addUsuario(Usuario usuario) {
this.usuarios.add(usuario);
}
public List<ContaBancaria> getContas() {
return Collections.unmodifiableList(contas);
}
public void addContas(ContaBancaria conta) {
this.contas.add(conta);
}
public List<String> getTelefones() {
return Collections.unmodifiableList(telefones);
}
public void addTelefone(String telefone) {
this.telefones.add(telefone);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((cpf == null) ? 0 : cpf.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ClienteFisico other = (ClienteFisico) obj;
if (cpf == null) {
if (other.cpf != null)
return false;
} else if (!cpf.equals(other.cpf))
return false;
return true;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public void setEndereco(Endereco endereco){
this.endereco = endereco;
}
public String getEndereco(){
return this.endereco.getEndereco();
}
public String getCadMap() {
return cadMap;
}
public void setCadMap(String cadMap) {
this.cadMap = cadMap;
}
@Override
public String toString() {
return "ClienteFisico [id=" + id + ", nome=" + nome + ", cpf=" + cpf + ", endereco=" + endereco + ", cadMap="
+ cadMap + ", site=" + site + ", pathLogo=" + pathLogo + ", validadeProcuracao=" + validadeProcuracao
+ ", validadeRadar=" + validadeRadar + ", usuarios=" + usuarios + ", contas=" + contas + ", telefones="
+ telefones + "]";
}
}
Endereco:
@Entity
public class Endereco {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
private String endereco;
private String bairro;
private String estado;
private String cidade;
private String pais;
private String cep;
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getPais() {
return pais;
}
public void setPais(String pais) {
this.pais = pais;
}
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Override
public String toString() {
return "Endereco [id=" + id + ", endereco=" + endereco + ", bairro=" + bairro + ", estado=" + estado
+ ", cidade=" + cidade + ", pais=" + pais + ", cep=" + cep + "]";
}
}