Tenho o seguinte problema, eu tenho um dataTable com um select, no qual eu escolho a alternativa e clico num botão pra cadastrar no banco a alternativa.
Porém, eu estava testando se o valor chegava na variável selecionada e pelo jeito esta retornando nullpointer.
Segue minha página xhtml:
<h:form id="form">
<h:outputLabel value="#{respostaBean.enquete.nome}" />
<p:dataTable id="alternativas" var="alternativa"
value="#{listaAlternativasBean.dataModel}"
selection="#{listaAlternativasBean.alternativaSelected}">
<f:facet name="header">
Pergunta - #{respostaBean.pergunta.enunciado}
</f:facet>
<p:column selectionMode="single" />
<p:column headerText="Resposta">
#{alternativa.resposta}
</p:column>
<f:facet name="footer">
<p:commandButton id="responderButton" value="Responder"
actionListener="#{listaAlternativasBean.gravar}">
</p:commandButton>
</f:facet>
</p:dataTable>
Meu Bean:
@ManagedBean
@ViewScoped
public class ListaAlternativasBean implements Serializable{
private static final long serialVersionUID = 5563690832308630037L;
private List<Alternativa> alternativas;
private ListDataModel<Alternativa> dataModel;
private Alternativa alternativaSelected = new Alternativa();
public ListaAlternativasBean(){
//this.dataModel = new DataModelAlternativas();
alternativas = new ArrayList<Alternativa>();
DAO<Alternativa> dao = new DAO<Alternativa>(Alternativa.class);
alternativas = dao.listaTodos();
dataModel = new DataModelAlternativas(alternativas);
}
public void gravar() {
// DAO<Resposta> dao = new DAO<Resposta>(Resposta.class);
// dao.adicionar(resposta);
//i++;
System.out.println("1" + alternativaSelected.getId());
}
public List<Alternativa> getAlternativas() {
return alternativas;
}
public ListDataModel<Alternativa> getDataModel() {
return dataModel;
}
public Alternativa getAlternativaSelected() {
return alternativaSelected;
}
public void setAlternativaSelected(Alternativa alternativaSelected) {
this.alternativaSelected = alternativaSelected;
}
}
e por via das dúvidas meu dataModel:
public class DataModelAlternativas extends ListDataModel<Alternativa> implements
SelectableDataModel<Alternativa>,Serializable {
private static final long serialVersionUID = 7595440700274987709L;
public DataModelAlternativas() {
}
public DataModelAlternativas(List<Alternativa> data) {
super(data);
}
@Override
public String getRowKey(Alternativa alternativa) {
return alternativa.getResposta();
}
@Override
public Alternativa getRowData(String rowKey) {
List<Alternativa> alternativas = new DAO<Alternativa>(Alternativa.class).listaTodos();
for(Alternativa alternativa : alternativas){
if(alternativa.getId().equals(rowKey))
return alternativa;
}
return null;
}
}
Abr 10, 2013 11:10:14 AM com.sun.faces.context.AjaxExceptionHandlerImpl log
SEVERE: JSF1073: javax.faces.event.AbortProcessingException obtido durante o processamento de INVOKE_APPLICATION 5: UIComponent-ClientId=form:alternativas, Message=java.lang.NullPointerException
Abr 10, 2013 11:10:14 AM com.sun.faces.context.AjaxExceptionHandlerImpl log
SEVERE: java.lang.NullPointerException
javax.faces.event.AbortProcessingException: java.lang.NullPointerException
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:182)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:777)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIData.broadcast(UIData.java:915)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:279)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at br.com.ManagedBean.ListaAlternativasBean.gravar(ListaAlternativasBean.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)
... 26 more
Pelo jeito a variável não está pegando o valor do dataTable, e esse é o problema.
Alguém se habilita?
Obrigado