Boa tarde pessoal!
Meu primeiro post no grupo. Tô gostando muito do grupo, apredendo
muito.
Bem, sou iniciante com JBoss Seam. Estou migrando agora do Struts 2
para o Seam. Tô tendo minha primeira experiência fazendo um trabalho
para pós.
Bem, vou relatar problema que estou tendo. Tenho uma tela que tem um
único campo h:inputTextarea. Quando clico no botão "incluir"dá o
seguinte erro:
@In attribute requires non-null value: mensagemAction.mensagemAux
Seguem os códigos do EJB, do TO e a página xhtml:
************* TO*********************
@Entity
@Name("mensagem")
@Table(name = "mensagem")
@SequenceGenerator(name = "mensagem_id_seq", sequenceName =
"tuitaseam.mensagem_id_seq")
@NamedQueries({@NamedQuery(name="Mensagem.query.listarTodos",
query="select obj FROM Mensagem obj ORDER BY
obj.usuario.id"),
@NamedQuery(name="Mensagem.query.listarPorTexto",
query="select obj FROM Mensagem obj WHERE obj.texto
= :texto"),
@NamedQuery(name="Mensagem.query.listarColecaoPorTexto",
query="select obj FROM Mensagem obj WHERE obj.texto
= :texto"),
@NamedQuery(name="Mensagem.query.listarColecaoPorId",
query="select obj FROM Mensagem obj WHERE obj.usuarioId
= :usuarioId ORDER BY
obj.id desc"),
@NamedQuery
(name="Mensagem.query.listarColecaoPorUsuarioNome",
query="select obj FROM Mensagem obj WHERE
obj.usuario.nome = :nome")
})
public class Mensagem implements Serializable {
private static final long serialVersionUID = -8542368196084952561L;
@Id
@GeneratedValue(generator = "mensagem_id_seq", strategy =
GenerationType.SEQUENCE)
@Column(name = "id", unique = true, nullable = false)
private Integer id;
private Integer usuarioId;
@OneToOne
@JoinColumn(name = "usuarioId", referencedColumnName = "id",
insertable = false, updatable = false)
private Usuario usuario;
@Column(name = "texto", nullable = false, length = 140)
private String texto;
@Temporal(TemporalType.TIMESTAMP)
private Date dataHora;
@Transient
private int flagExcluir = 0;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUsuarioId() {
return usuarioId;
}
public void setUsuarioId(Integer usuarioId) {
this.usuarioId = usuarioId;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String getTexto() {
return texto;
}
public void setTexto(String texto) {
this.texto = texto;
}
public Date getDataHora() {
return dataHora;
}
public void setDataHora(Date dataHora) {
this.dataHora = dataHora;
}
public int getFlagExcluir() {
return flagExcluir;
}
public void setFlagExcluir(int flagExcluir) {
this.flagExcluir = flagExcluir;
}
}
************* EJB *********************
@Stateless
@Name("mensagemAction")
@TransactionAttribute(value = TransactionAttributeType.REQUIRED)
@Restrict("#{identity.loggedIn}")
public class MensagemActionBean implements MensagemAction {
@PersistenceContext
private EntityManager em;
@SuppressWarnings("unused")
@In
private FacesMessages facesMessages;
@DataModel
private List<Mensagem> mensagens;
@In(create = true)
@Out(required = false)
@DataModelSelection
private Mensagem mensagemAux;
public Mensagem getMensagemAux() {
return mensagemAux;
}
public void setMensagemAux(Mensagem mensagemAux) {
this.mensagemAux = mensagemAux;
}
@Factory(value = "mensagens")
public void listarMensagens() {
Usuario lUsuario = (Usuario) Contexts.getSessionContext().get
("usuarioSessao");
mensagens = lUsuario.getMensagens();
}
@Begin(join = true)
public String editar(Mensagem mensagem) {
em.refresh(mensagem);
this.mensagemAux = mensagem;
return ("editarMensagem");
}
public String remover(Mensagem mensagem) {
em.remove(mensagem);
return ("mensagens");
}
@End
public String incluir() {
Mensagem pMensagem = new Mensagem();
Usuario lUsuario = (Usuario) Contexts.getSessionContext().get
("usuarioSessao");
pMensagem.setDataHora(new Date());
pMensagem.setFlagExcluir(0);
pMensagem.setTexto(getMensagemAux().getTexto());
pMensagem.setUsuario(lUsuario);
pMensagem.setUsuarioId(lUsuario.getId());
em.persist(pMensagem);
return ("mensagens");
}
public List<Mensagem> getMensagens() {
return mensagens;
}
}
************* XHTML *********************
<!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"
xmlns:a="
http://richfaces.org/a4j"
template="layout/principal.xhtml">
<ui:define name="body">
<rich:panel>
<f:facet name="header">Mensagens</f:facet>
<h:form id="MensagemForm">
<h:inputTextarea rows="3" cols="80" label="mensagem" value="#
{mensagemAux.texto}" id="text" />
<h:commandButton id="incluir" value="Incluir" action="#
{mensagemAction.incluir}"/>
<br/><br/><br/><br/>
<rich:dataTable value="#{mensagens}" var="mensagem"
id="tabelaMensagem" rows="5" columnClasses="dataCell">
<rich:column label="Usuario" id="colunaUsuario">
<f:facet name="header">
<h:outputText value="Usuario" />
</f:facet>
<h:outputText value="#{mensagem.usuario.nome}"/>
</rich:column>
<rich:column label="Texto" id="colunaTexto">
<f:facet name="header">
<h:outputText value="Texto" />
</f:facet>
<h:outputText value="#{mensagem.texto}"/>
</rich:column>
</rich:dataTable>
<rich:datascroller for="tabelaMensagem"></rich:datascroller>
</h:form>
</rich:panel>
</ui:define>
</ui:composition>
************* listarMensagens.page.xml *********************
<?xml version="1.0" encoding="UTF-8"?>
<page xmlns="
http://jboss.com/products/seam/pages"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://jboss.com/products/seam/pages
http://jboss.com/products/seam/pages-2.2.xsd">
<navigation from-action="#{mensagemAction.incluir}">
<rule if="#{identity.loggedIn}">
<redirect view-id="/listarMensagens.xhtml"/>
</rule>
</navigation>
</page>
*****************************************************************
Desculpem o tamanho da mensagem. É que como é o primeiro post não sei
se fiz de forma correta.
Desde já agradeço a atenção.
Abraços,
Joilton Almeida.