Exibir campo longblob no JSF
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,
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,
Ricardo Pestana
Curtidas 0
Respostas
Davi Costa
13/06/2012
Oque vc salva nesses campos arquivos?
Se for que tal tranformá-los em arquivos antes de exibir na tela.
att Davi
Se for que tal tranformá-los em arquivos antes de exibir na tela.
att Davi
GOSTEI 0
Ricardo Pestana
13/06/2012
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?
Tem idéia de como trabalhar para exibir seu conteúdo em tela?
GOSTEI 0
Davi Costa
13/06/2012
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
att Davi
GOSTEI 0
Ricardo Pestana
13/06/2012
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,
call minha_procedures
É isso que vc tá perguntando?
Obrigado pela atenção,
GOSTEI 0
Ricardo Pestana
13/06/2012
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,
call minha_procedures
É isso que vc tá perguntando?
Obrigado pela atenção,
GOSTEI 0
Davi Costa
13/06/2012
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
é um array de bytes? é um texto longo?
Dependendo do que vc esteja guardando lá, saberemos qual componente jsf mais indicado
att Davi
GOSTEI 0
Ricardo Pestana
13/06/2012
Bom dia,
É um texto...
obrigado,
É um texto...
obrigado,
GOSTEI 0
Davi Costa
13/06/2012
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
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
GOSTEI 0
Ricardo Pestana
13/06/2012
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;
GOSTEI 0
Davi Costa
13/06/2012
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
<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
GOSTEI 0
Ricardo Pestana
13/06/2012
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;
}
}
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;
}
}
GOSTEI 0
Davi Costa
13/06/2012
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
@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
GOSTEI 0
Ricardo Pestana
13/06/2012
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
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
GOSTEI 0
Davi Costa
13/06/2012
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
@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
GOSTEI 0
Ricardo Pestana
13/06/2012
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
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
GOSTEI 0
Davi Costa
13/06/2012
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
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
GOSTEI 0
Ricardo Pestana
13/06/2012
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;
}
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;
}
GOSTEI 0
Davi Costa
13/06/2012
É uma solução boa sim.
Lembrando que terá sempre que fazer o volta ao inserir ou alterar no banco
att Davi
Lembrando que terá sempre que fazer o volta ao inserir ou alterar no banco
att Davi
GOSTEI 0