Galera do GUJ,
é o seguinte: tenho uma tabela com resultado de uma consulta e nessa tabela tem uma coluna de Status, onde status pode ser Ativo, Inativo, Pendente. Só que ao invéz de mostrar o texto escrito, ele retorna uma imagem de acordo com o status.
Código:
.
.
.
<rich:column style="width:50px;" filterValue="#{corretorPessoa.statusCorretor}">
<f:facet name="header">
<h:outputText value="Status" />
</f:facet>
<s:div style="float:center; text-align:center;">
<h:commandLink title="#{corretorPessoa.statusCorretor.nomeStatus}" actionListener="#{corretorAction.alterarStatus(corretorDados)}" onclick="return confirm('Deseja realmente alterar o status desse corretor?');" >
<a4j:support event="onchange" limitToList="true" ajaxSingle="true" bypassUpdates="false" reRender="resultado" />
<img />
</h:commandLink>
</s:div>
</rich:column>
.
.
.
Até ai blz.
Agora que vem o pro. Quando eu clicar na imagem, por exemplo, imagem relacionada ao status Ativo ele alterar no banco para Inativo. O relacionamento entre as tabelas é a seguinte:
Tabela Corretor <-> Tabela Status
Entity Corretor
@Entity
@Table(name = "Corretor", schema = "ev")
@NamedQueries({
.
.
.
})
public class CorretorPessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idCorretor" , unique=true , nullable=false)
private Integer idCorretor;
.
.
.
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="Status_idStatus")
private StatusCorretor statusCorretor = new StatusCorretor();
.
.
.
public StatusCorretor getStatusCorretor() {
return statusCorretor;
}
public void setStatusCorretor(StatusCorretor statusCorretor) {
this.statusCorretor = statusCorretor;
}
public String getImgSituacao(String status) {
if(status.equals("Ativo")){
return "../../../../img/icon_ativo.png";
} else if(status.equals("Inativo")){
return "../../../../img/icon_inativo.png";
}
return "../../../../img/icon_pendente.png";
}
.
.
.
}
Entity StatusCorretor
@Entity
@Table(name = "StatusCorretor", schema = "ev")
@NamedQueries({
.
.
.
})
public class StatusCorretor implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "idStatus" , nullable = false)
private Integer idStatus = 0;
@Column(name = "nomeStatus")
private String nomeStatus;
@OneToMany(mappedBy ="statusCorretor")
private List<CorretorPessoa> corretorPes;
public List<CorretorPessoa> getCorretorPes() {
return corretorPes;
}
public void setCorretorPes(List<CorretorPessoa> corretorPes) {
this.corretorPes = corretorPes;
}
public Integer getIdStatus() {
return idStatus;
}
public void setIdStatus(Integer idStatus) {
this.idStatus = idStatus;
}
public String getNomeStatus() {
return nomeStatus;
}
public void setNomeStatus(String nomeStatus) {
this.nomeStatus = nomeStatus;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((idStatus == null) ? 0 : idStatus.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
return obj instanceof StatusCorretor && ((StatusCorretor)obj).getIdStatus().equals(this.idStatus);
}
}
Action
Aqui eu não sei como passar o status da pessoa:
public void alterarStatus(CorretorPessoa c){
this.corretorPessoa = c;
if(corretorPessoa.getStatus().equals("Pendente") || corretorPessoa.getStatus().equals("Inativo")){
this.corretorPessoa.setStatusCorretor(); //AQUI - passar para Ativo
} else if(corretorPessoa.getStatus().equals("Ativo")){
this.corretorPessoa.setStatusCorretor(); //AQUI - passar para Inativo
}
try {
this.corretorManager.atualizaStatus(this.corretorPessoa);
this.statusMessages.add("Status do corretor foi alterado com sucesso!");
}catch(Exception e){
e.printStackTrace();
}
}
Como passo o objeto StatusCorretor nesse caso?