quinta-feira, 19 de setembro de 2013
JSF - Comentar ou excluir partes de código XHTML
<h: outputText value =" Nome : #{usuarioMB . nome}" />
<ui: remove >
<h: outputText value =" Sobrenome : #{usuarioMB.sobrenome}" />
</ui: remove >
Dessa forma o código dentro do ui:remove não será processado pelo JSF. Se você comentar o código com <!-- xxx --> o JSF vai processar o código comentado, executar as chamadas ao bean, porém, não vai exibir o resultado na tela.
JSF - h:selectOneMenu sem valor default
<h:selectOneMenu value ="#{cidadesBean.cidadeEscolhida}">
<f: selectItem itemLabel ="Selecione um item" noSelectionOption =" true "/>
<f: selectItems
value ="#{cidadesBean.cidades}"
var ="cidade"
itemValue ="#{cidade}"
itemLabel ="#{cidade.nome}" />
</h: selectOneMenu >
<f: selectItem itemLabel ="Selecione um item" noSelectionOption =" true "/>
<f: selectItems
value ="#{cidadesBean.cidades}"
var ="cidade"
itemValue ="#{cidade}"
itemLabel ="#{cidade.nome}" />
</h: selectOneMenu >
terça-feira, 2 de julho de 2013
org.hibernate.exception.GenericJDBCException: Overflow Numérico / Caused by: java.sql.SQLException: Overflow Numérico
Solução: Altere a propriedade @Fetch de alguns mapeamentos para @Fetch(FetchMode.SELECT).
De:
public class ProcessoImp extends Processo implements Serializable, Cloneable{
@OneToOne
@JoinColumn(name="transportadorinternacional_id", insertable=false,updatable=false)
private Contato transportadorInternacional;
@OneToOne
@Fetch(FetchMode.JOIN)
@JoinColumn(name="moeda_valor_vmld", insertable=false,updatable=false)
private Moeda moedaVmld;
}
Para:
public class ProcessoImp extends Processo implements Serializable, Cloneable{
@OneToOne
@Fetch(FetchMode.SELECT)
@JoinColumn(name="transportadorinternacional_id", insertable=false,updatable=false)
private Contato transportadorInternacional;
@OneToOne
@Fetch(FetchMode.SELECT)
@JoinColumn(name="moeda_valor_vmld", insertable=false,updatable=false)
private Moeda moedaVmld;
}
De:
public class ProcessoImp extends Processo implements Serializable, Cloneable{
@OneToOne
@JoinColumn(name="transportadorinternacional_id", insertable=false,updatable=false)
private Contato transportadorInternacional;
@OneToOne
@Fetch(FetchMode.JOIN)
@JoinColumn(name="moeda_valor_vmld", insertable=false,updatable=false)
private Moeda moedaVmld;
}
Para:
public class ProcessoImp extends Processo implements Serializable, Cloneable{
@OneToOne
@Fetch(FetchMode.SELECT)
@JoinColumn(name="transportadorinternacional_id", insertable=false,updatable=false)
private Contato transportadorInternacional;
@OneToOne
@Fetch(FetchMode.SELECT)
@JoinColumn(name="moeda_valor_vmld", insertable=false,updatable=false)
private Moeda moedaVmld;
}
terça-feira, 25 de junho de 2013
org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations):
// Estrutura
public class LancamentoCc implements Serializable,
Comparable<LancamentoCc>,Cloneable{
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="str_nro_processo",referencedColumnName="nref", insertable=false,updatable=false)
private AbreProcesso processo;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="int_movimento_conta", insertable=false, updatable=false)
private
MovimentoCc movimento;
}
public class AbreProcesso implements
Serializable,Cloneable {
@OneToMany(mappedBy="processo", cascade =
CascadeType.ALL,fetch=FetchType.EAGER, orphanRemoval = true)
@Fetch(FetchMode.SUBSELECT)
protected
Collection<LancamentoCc> movimentos = new
ArrayList<LancamentoCc>();
}
public class MovimentoCc implements Serializable{
@OneToMany(mappedBy="movimento", cascade = CascadeType.ALL,
fetch = FetchType.EAGER ,orphanRemoval=false)
@Fetch(FetchMode.SELECT)
private
List<LancamentoCc> lancamentos = new
ArrayList<LancamentoCc>();
}
// Dessa forma
ocorre o erro
public String delete(ContaReceber conta) {
public String delete(ContaReceber conta) {
try{
dao = new
LancamentoContaDao<ContaReceber>(HibernateUtil.getSession(),
ContaReceber.class);
dao.delete(conta);
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
// Dessa forma funciona
public String delete(ContaReceber conta) {
try{
Dao<AbreProcesso> dao = new
Dao<AbreProcesso>(HibernateUtil.getSession(), AbreProcesso.class);
AbreProcesso processo =
conta.getProcesso();
processo.getMovimentos().remove(conta);
dao.save(processo);
}catch (Exception e) {
e.printStackTrace()
}
return null;
}
segunda-feira, 17 de junho de 2013
java.util.ConcurrentModificationException
Causa do erro
for(Lancamento lanc : processo.getLancamentos() ){
if(lanc.getStrOrigem() != null && lanc.getStrOrigem().equals("FE")){
processo.getLancamentos().remove(lanc);
}
}
Solução, usar iterator
for (Iterator<Lancamento> iterator = processo.getLancamentos().iterator(); iterator.hasNext();) {
Lancamento lancamento = iterator.next();
if(lancamento.getStrOrigem() != null && lancamento.getStrOrigem().equals("FE")){
iterator.remove();
}
}
Fonte: http://www.guj.com.br/java/30323-erro-com-collections-javautilconcurrentmodificationexception
sexta-feira, 14 de junho de 2013
h:selectOneMenu com converter
Classe a ser convertida
@Entity
public class Comissao implements Serializable{
@Id
private Integer id;
private String descricao;
}
Classe onda a classe a ser convertida é utilizada
@Entity
public class Processo implements Serializable{
// Podem ocorrer problemas durante o carregamento do h:selectOneMenu, se marcado como LAZY
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name="comissaoId")
protected Comissao comissao;
}
Converter
public class ConverterComissao implements Converter{
@Override
public Object getAsObject(FacesContext context, UIComponent component, String string) {
if(string == null || string.isEmpty()){
return null;
}
Dao<Comissao> dao = new Dao<Comissao>(HibernateUtil.getSession(),Comissao.class);
Integer id = Integer.valueOf(string);
return dao.get(id);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object object) {
Comissao comissao = (Comissao) object;
if(comissao == null || comissao.getInt_id() == null){
return null;
}
return String.valueOf(comissao.getId());
}
}
Função para popular o h:selectOneMenu
public List<Comissao> comboComissao(){
Dao<Comissao> dao;
dao = new Dao<Comissao>(HibernateUtil.getSession(),Comissao.class);
Comissao comissao = new Comissao();
comissao.setStr_descricao("");
comissao.setInt_id(null);
List<Comissao> list = new ArrayList<Comissao>();
list.add(comissao);
try{
list.addAll( dao.findAll("int_id", false) );
}catch (Exception e) {
new GeraFacesMessage("ATENÇÃO: OCORREU UM ERRO DURANTE O PROCESSAMENTO, A OPERAÇÃO NÃO FOI EFETUADA! \n",e);
e.printStackTrace();
}
return list;
}
O h:selectOneMenu
<h:selectOneMenu value="#{fechamentoMB.processo.comissao}" maxListHeight="50px;" converter="converterComissao">
<f:selectItems value="#{selectItems.comboComissao}" var="comissao" itemValue="#{comissao}" itemLabel="#{comissao.descricao}" />
<f:ajax event="change" render="optPanel" listener="#fechamentoMB.changeListenerComissao()}"/>
</h:selectOneMenu>
quarta-feira, 15 de maio de 2013
JSF: Exibir um popup durante a execução de um evento
<a4j:commandButton
status="waitModalStatus"
title="Enviar arquivo via FTP"
actionListener="#{processoMB.sendFtp(upload)}"
image="/resources/images/16x16/up.png">
id="waitModal" style="text-align:center" autosized="true" modal="true" width="200" >
<h:graphicImage library="images" name="ajaxloader32.gif" alt="ai"/><br />
<h:outputText value="Transmitindo o arquivo, aguarde!" />
</rich:popupPanel>
<a4j:status name="waitModalStatus">
<f:facet name="start">
<rich:componentControl event="start" operation="show" target="waitModal" />
</f:facet>
<f:facet name="stop">
<rich:componentControl event="stop" operation="hide" target="waitModal" />
</f:facet>
</a4j:status>
Assinar:
Postagens (Atom)