DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 
DevWare  
Novidade: DevMedia lança o DevWare - Saiba mais!

Fórum DevMedia


Autor
Mensagem
Ricardo
 


País: Brasil
Estado: SP
Cidade: Santa Lucia
Mensagens: 30
 Postado em: 13/6/2012 03:03:48 PM
 
Boa tarde,

Como faço pra exibir um campo do tipo longblob (mysql), em uma página JSF???

Usei a tag outputtext e inputtextarea, mas ambas imprimem [B@1e99daa7 que acredito ser a referência do objeto...

Obrigado,

Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 13/6/2012 03:15:29 PM
 
Oque vc salva nesses campos arquivos?
Se for que tal tranformá-los em arquivos antes de exibir na tela.

att Davi

Ricardo
 


País: Brasil
Estado: SP
Cidade: Santa Lucia
Mensagens: 30
 Postado em: 13/6/2012 03:19:54 PM
 
Na verdade estou estudando JSF e peguei a tabela mysql.event pra fazer um exemplo (listar os campos em tela, abrir uma janela com detalhes) e o campo body que contém a instrução do evento é desse tipo.

Tem idéia de como trabalhar para exibir seu conteúdo em tela?

Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 13/6/2012 03:22:35 PM
 
Precisamos saber o que vc tá salvando no banco, são array de bytes?... sem essa informação vai ser como atirar no escuro.

att Davi

Ricardo
 


País: Brasil
Estado: SP
Cidade: Santa Lucia
Mensagens: 30
 Postado em: 13/6/2012 03:28:05 PM
 
Desculpe, acho q não fui claro na resposta anterior.... mas é o texto (instrução sql) que usei na criação do evento. Por exemplo:

call minha_procedures


É isso que vc tá perguntando?

Obrigado pela atenção,

Ricardo
 


País: Brasil
Estado: SP
Cidade: Santa Lucia
Mensagens: 30
 Postado em: 13/6/2012 03:28:06 PM
 
Desculpe, acho q não fui claro na resposta anterior.... mas é o texto (instrução sql) que usei na criação do evento. Por exemplo:

call minha_procedures


É isso que vc tá perguntando?

Obrigado pela atenção,

Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 14/6/2012 06:37:32 AM
 
O q pergunteié o que vc guarda nessa coluna do seu banco do tipo blob.
é um array de bytes? é um texto longo?
Dependendo do que vc esteja guardando lá, saberemos qual componente jsf mais indicado

att Davi

Ricardo
 


País: Brasil
Estado: SP
Cidade: Santa Lucia
Mensagens: 30
 Postado em: 14/6/2012 07:32:22 AM
 
Bom dia,

É um texto...

obrigado,

Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 14/6/2012 12:36:39 PM
 
Ok,
mostra como tá sua página e seu controller. E vc tb garante que no banco não está da forma que renderiza na página né?
Desconfio que talvez a referencia na página não esteja legal

att Davi

Ricardo
 


País: Brasil
Estado: SP
Cidade: Santa Lucia
Mensagens: 30
 Postado em: 18/6/2012 08:04:16 AM
 

Bom dia,

Na página está assim:

<h:outputText value=Rotina/Instrução:></h:outputText>
<h:inputTextarea readonly=true rows=5 cols=60 value=#{mBEvent.selectedEvent.body}/>

E na entidade está assim:

@Lob
@Column(name = body_utf8)
private byte[] bodyUtf8;

Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 18/6/2012 08:47:13 AM
 
Me parece não estar 100% legal, pois sua página está:

<h:inputTextarea readonly=true rows=5 cols=60 value=#{mBEvent.selectedEvent.body}/>

E na entidade está assim:

@Lob
@Column(name = body_utf8)
private byte[] bodyUtf8;
Como é seu getter, desse atributo?
Tenta potsra também os fontes de mBEvent, principalmente esse atributo selectedEvent e seu método getBody


att Davi

Ricardo
 


País: Brasil
Estado: SP
Cidade: Santa Lucia
Mensagens: 30
 Postado em: 18/6/2012 09:04:10 AM
 
Bom dia,

Segue o código...


@ManagedBean
@RequestScoped
public class MBEvent implements Serializable {

private Event selectedEvent;

public MBEvent() {
}

public Event getSelectedEvent() {
return selectedEvent;
}

public void setSelectedEvent(Event selectedEvent) {
this.selectedEvent = selectedEvent;
}

public List<Event> getAllEvent() throws ClassNotFoundException, SQLException {
EntityManagerFactory emf = Persistence.createEntityManagerFactory(Mysql);
EntityManager em = emf.createEntityManager();
Query q = em.createNamedQuery(findAll);
List<Event> events = q.getResultList();
em.close();
emf.close();
return events;
}
}

@Entity
@Table(name = event)
@XmlRootElement
@NamedQueries({
@NamedQuery(name = findAll, query = SELECT e FROM Event e)
})
public class Event implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected EventPK eventPK;
@Basic(optional = false)
@NotNull
@Lob
@Column(name = body)
private byte[] body;


public byte[] getBody() {
return body;
}

public void setBody(byte[] body) {
this.body = body;
}

}



Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 18/6/2012 09:35:04 AM
 
Olha o que eu perguntei desde o começo, vc salva um array de bytes:
@Basic(optional = false)
@NotNull
@Lob
@Column(name = body)
private byte[] body;

E ai vc quer salvar um texto ou um array de bytes?
Se for um array de bytes ai trabalhará com arquivo se for texto deve trocar para String

att Davi

Ricardo
 


País: Brasil
Estado: SP
Cidade: Santa Lucia
Mensagens: 30
 Postado em: 18/6/2012 09:56:41 AM
 
Davi,

Eu havia entendido sua pergunta, mas acho q fui infeliz na resposta..

É assim, estou montando uma página que exiba o conteúdo da tabela event do mysql. Essa tabela é onde ficam armazenados os jobs que utilizo para algumas manutenções em minha base.

Crio esses jobs com um comando do próprio mysql, e ele armazenha minha instrução nesse campo. A principio e pelo que entendo esse conteúdo sempre será um texto (script sql), e pelo que eu entendo (posso perfeitamente estar errado) estão usando lob prevendo que a instrução pode conter um script grande.

Bom, aí começou meu problema não consigo mostrar o conteúdo desse campo na página... se eu tiver que converter ou ler os bytes do lob para posteriormente convertê-los em texto e exibi-los no textarea eu não sei onde devo encaixar essa lógica.

Entendeu? Se puder me orientar eu agradeço...

Obrigado por enqto e abraços

Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 18/6/2012 10:16:43 AM
 
Vai resolver facilmente seu problema se vc alterar:
@Basic(optional = false)
@NotNull
@Lob
@Column(name = body)
private byte[] body;

para
@Basic(optional = false)
@NotNull
@Lob
@Column(name = body)
private String body;

Desse modo pode conter grande quantidades de caracteres, pode ficar tranquilo

att Davi

Ricardo
 


País: Brasil
Estado: SP
Cidade: Santa Lucia
Mensagens: 30
 Postado em: 18/6/2012 10:38:05 AM
 
Davi,

Fiz o que sugeriu e veja o que foi exibido:

63616C6C2070726F635F6D616E5F646173685F636F6E73756C7461


Acho q não vou escapar na conversão né? Tem idéia de como fazer isso?

Obrigado

Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 18/6/2012 10:54:41 AM
 
E no banco como está essa coluna?
Pq se vc tiver em homologação, o problema aconteceu pq vc salvou como array.
Se ainda vai entrar em produção, pode fazer o teste de inserir um e consultar q vai funcionar beleza, o problema que está ai é pq foi salvo como array de bytes


att Davi

Ricardo
 


País: Brasil
Estado: SP
Cidade: Santa Lucia
Mensagens: 30
 Postado em: 18/6/2012 12:06:16 PM
 
Fiz com conversor customizdo e funcionou, o que vc acha dessa solução???

public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null) return unnamed;
byte[] bytes = (byte[]) value;
String body = new String(bytes);
return body;
}

Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 18/6/2012 02:14:03 PM
 
É uma solução boa sim.
Lembrando que terá sempre que fazer o volta ao inserir ou alterar no banco

att Davi

web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03