Bom, vou escrever aqui rapidamente (não é de caso de uso verdadeiro, estou apenas dando exemplo, ok?)
Entidade:
import seu_package.EmpresaVO;
@Entity
public class Empresa {
@Id
private Long id;
@Column(nullable=false, length=100)
private String nome;
@Column(nullable=false, length=100)
private String endereco;
@Column(nullable=false, length=15)
private String cnpj;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public void setNome(String nome){
this.nome = nome;
}
public String getNome(){
return this.nome;
}
public void setEndereco(String endereco){
this.endereco= endereco;
}
public String getEndereco(){
return this.endereco;
}
public void setCnpj(String cnpj){
this.cnpj= cnpj;
}
public String getCnpj(){
return this.cnpj;
}
public EmpresaVO entity2VO(){
EmpresaVO eVO = new EmpresaVO();
eVO.setId(this.getId());
eVO.setNome(this.getNome());
eVO.setEndereco(this.getEndereco());
eVO.setCnpj(this.getCnpj());
return eVO;
}
public void vo2Entity(EmpresaVO eVO){
this.setId(eVO.getId());
this.setNome(eVO.getNome());
this.setEndereco(eVO.getEndereco());
this.setCnpj(eVO.getCnpj());
}
}
VO:
public class EmpresaVO {
private Long id;
private String nome;
private String endereco;
private String cnpj;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public void setNome(String nome){
this.nome = nome;
}
public String getNome(){
return this.nome;
}
public void setEndereco(String endereco){
this.endereco= endereco;
}
public String getEndereco(){
return this.endereco;
}
public void setCnpj(String cnpj){
this.cnpj= cnpj;
}
public String getCnpj(){
return this.cnpj;
}
/*
* Esse método trunca o nome da empresa em 50 caracteres (47 letras mais 3 reticências)
*/
public String getNomeTruncado(){
String retorno = "";
if (this.getNome().length() <= 47) {
retorno = this.getNome();
}
else {
retorno = this.getNome().substring(0, 47) + "...";
}
return retorno;
}
Managed Bean
import seu_package.EmpresaVO;
public class MBeanCadastroEmpresa(){
private EmpresaVO empresa;
//.
//. Os demais atributos e métodos da classe
//.
public void doSalvar(ActionEvent e){
// Instanciar seu método que salva.Nesse seu método, deverá intanciar a entidade empresa, e invocar o método
// vo2Entity, persistindo a entidade com os dados.
seu_metodo.salvar(this.getEmpresa);
}
public EmpresaVO getEmpresa(){
return this.empresa;
}
public void setEmpresa(EmpresaVO empresa){
this.empresa = empresa;
}
}
É por aí. Seu método salvar tem que instanciar a entidade Empresa, e passar os dados do VO pra ela antes de persistir (já que só persiste a entidade, que tem as anotações, etc).
Os campos da empresaVO podem estar diretamente na tela, por exemplo:
<h:inputText id="txtNomeEmpresa" value="#{mBeanCadastroEmpresa.empresa.nome}" maxlenght="100"/>
<h:inputText id="txtEnderecoEmpresa" value="#{mBeanCadastroEmpresa.empresa.endereco}" maxlenght="100" />
<h:inputText id="txtCnpjEmpresa" value="#{mBeanCadastroEmpresa.empresa.cnpj}" maxlenght="15"/>
O botão seria assim:
<a4j:commandButton id="btnSalvar" actionListener="#{mBeanCadastroEmpresa.doSalvar}"/>
Ao clicar no botão Salvar, executará o método do ManagedBean doSalvar, e os dados colocados na tela já estarão populados (nome da empresa, endereço e cnpj).
Bom, acho que é isso.
Abraço