Galera esse e meu primeiro post, mas ja acompanho o GUJ a bastante tempo só estudando.
Desenvolvi uma aplicação que inseri dados, pesquisa os dados inseridos e altera os dados.
tenho um campo boolean chamado status e ao fazer alteração o campo mostra a opção de dizer se o status estar ativo ou cancelado. ate ai td bem…
Mas ao selecionar o status desejado e pesquisar os dados ele me retorna o campo status como “true” ou “false” e quero que retorne “Ativo ou Cancelado”.
Ja fiz diversas pesquisas aqui e na net mas não estou conseguindo prosseguir com a conversão para String.
aqui segue o código da minha pagina jsf.
<h:outputText value="Status* " />
<p:selectOneMenu value="#{sistemaMB.sistema.status}">
<f:selectItem itemValue="true" itemLabel="Ativo" />
<f:selectItem itemValue="false" itemLabel="Cancelado" />
</p:selectOneMenu>
Cara pq vc não usa Enum
public enum Status {
ATIVO, CANCELADO;
}
na entidade/classe onde vc tem o campo boolean vc alteraria esse campo para ser do tipo Status e na tabela correspondente do banco de dados vc usaria o tipo VARCHAR.
[quote=augustoneto]Cara pq vc não usa Enum
public enum Status {
ATIVO, CANCELADO;
}
na entidade/classe onde vc tem o campo boolean vc alteraria esse campo para ser do tipo Status e na tabela correspondente do banco de dados vc usaria o tipo VARCHAR.[/quote]
opa boa ideia… mas voce poderia detalhar mas em um exemplo para mim augustoneto.
@Entity
@Table(name="sistema")
public class Sistema {
@Id
@GeneratedValue
private Long idSistema;
private String descricao;
private String sigla;
private String email;
private String url;
private boolean status;
private Date ultimaAlteracao;
private String justificativa;
private String novaJustificativa;
private String usuario;
public Long getIdSistema() {
return idSistema;
}
public void setIdSistema(Long idSistema) {
this.idSistema = idSistema;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getSigla() {
return sigla;
}
public void setSigla(String sigla) {
this.sigla = sigla;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public boolean isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public Date getUltimaAlteracao() {
return ultimaAlteracao;
}
public void setUltimaAlteracao(Date ultimaAlteracao) {
this.ultimaAlteracao = ultimaAlteracao;
}
public String getJustificativa() {
return justificativa;
}
public void setJustificativa(String justificativa) {
this.justificativa = justificativa;
}
public String getNovaJustificativa() {
return novaJustificativa;
}
public void setNovaJustificativa(String novaJustificativa) {
this.novaJustificativa = novaJustificativa;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
}
Pode fazer via ternário:
Você também pode criar um conversor, Abaixo segue um exemplo:
@FacesConverter(value = "simNaoConverter")
public class YesNoConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return value;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
Boolean condition = (Boolean) value;
if (condition) {
return "SIM";
} else {
return "NÃO";
}
}
}
E no xhtml:
O legal do converter é que dá para reaproveitar em outros momentos.
ayslanms vlw pela dica.
mas te perguntar, eu chamo o objeto boolean direto da entidade/classe para conversao ou chamo do metodo que lista ou que pesquisa dos dados e mostra na tela.
[quote=B.I.H]ayslanms vlw pela dica.
mas te perguntar, eu chamo o ojeto boolean direto da entidade/classe para conversao ou chamo do metodo que lista ou que pesquisa dos dados e mostra na tela.
[/quote]
A idéia do conversor é usar no xhtml. Como mostrei acima:
<h:outputText value="#{sistemaMB.sistema.status}" converter="simNaoConverter" />
O conversor só vai agir quando a tela for chamada.