Caros colegas,
estou com dúvidas na forma como proceder para permitir o envio de mais de um tipo de arquivo utilizando o componente <s:fileUpload>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
template="/layout/template.xhtml">
<ui:define name="body">
<h:form id="eventoForm" enctype="multipart/form-data">
<rich:panel>
<f:facet name="header">#{messages['eventoFEES.eventoFEES.label']}</f:facet>
<s:decorate id="descricaoField" template="/layout/edit.xhtml">
<ui:define name="label">#{messages['eventoFEES.tituloApresentacao.label']}</ui:define>
<h:inputText id="descricao" required="true"
value="#{eventoFEES.descricao}"/>
</s:decorate>
<s:decorate id="autorPrincipalHeader" template="/layout/edit.xhtml">
<ui:define name="label">#{messages['eventoFEES.autorPrincipal.label']}</ui:define>
<h:inputText id="autorPrincipal" value="#{eventoFEES.autorPrincipal}" required="true"/>
</s:decorate>
<s:decorate id="localField" template="/layout/edit.xhtml">
<ui:define name="label">#{messages['eventoFEES.local.label']}</ui:define>
<h:inputText id="local"
value="#{eventoFEES.localRealizacao}"/>
</s:decorate>
<s:decorate id="resumoField" template="/layout/edit.xhtml">
<ui:define name="label">#{messages['eventoFEES.resumo.label']}</ui:define>
<h:inputTextarea id="resumo" required="true"
value="#{eventoFEES.resumo}"/>
</s:decorate>
<s:decorate id="publicacaoField" template="/layout/edit.xhtml">
<ui:define name="label">#{messages['eventoFEES.artigo.label']}</ui:define>
<s:fileUpload id="conteudo" data="#{publicacao.conteudo}" fileName="#{publicacao.nome}"/>
</s:decorate>
<div style="clear:both"/>
</rich:panel>
<div class="actionButtons">
<h:commandButton id="save"
value="#{messages['comando.salvar']}"
action="#{administrarEventoFESSAction.inserirEventoFEES}"
rendered="#{!administrarEventoFESSAction.estadoEdicao}"/>
<h:commandButton id="update"
value="#{messages['comando.atualizar']}"
action="#{administrarEventoFESSAction.alterarEventoFEES}"
rendered="#{administrarEventoFESSAction.estadoEdicao}"/>
<h:commandButton id="delete"
value="#{messages['comando.excluir']}"
action="#{administrarEventoFESSAction.apagarEventoFEES}"
immediate="true"
rendered="#{administrarEventoFESSAction.estadoEdicao}"/>
<s:button id="cancel"
value="#{messages['comando.voltar']}"
action="#{administrarEventoFESSAction.eventoFEESCancelar}"
view="/edicaoEventoFEES/visualizarEdicaoFEES.xhtml"/>
</div>
</h:form>
</ui:define>
</ui:composition>
Eis o componente publicacao
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
import org.jboss.seam.annotations.Name;
@Entity
@Name("publicacao")
public class Publicacao implements Serializable
{
/**
*
*/
private static final long serialVersionUID = 5096349621953480365L;
// seam-gen attributes (you should probably edit these)
private Long id;
private Integer version;
private String nome;
private String resumo;
private String autor;
private Date dataPublicacao;
private String tipo;
@NotNull
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
private byte[] conteudo;
@Lob
@Basic(fetch=FetchType.LAZY)
public byte[] getConteudo() {
return conteudo;
}
public void setConteudo(byte[] conteudo) {
this.conteudo = conteudo;
}
@Id @GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Version
public Integer getVersion() {
return version;
}
private void setVersion(Integer version) {
this.version = version;
}
@NotNull
@Length(max=100)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getResumo() {
return resumo;
}
public void setResumo(String resumo) {
this.resumo = resumo;
}
public String getAutor() {
return autor;
}
public void setAutor(String autor) {
this.autor = autor;
}
@Temporal(TemporalType.DATE)
public Date getDataPublicacao() {
return dataPublicacao;
}
public void setDataPublicacao(Date dataPublicacao) {
this.dataPublicacao = dataPublicacao;
}
}
Na página xhtml eu gostaria de adicionar mais um campo para conter a apresentação do evento (e não somente o artigo).
Mas se o nome do componente já foi definido como “publicacao”, como fazer para ter acesso a outra instância do objeto Publicacao?
Obrigado!