[RESOLVIDO] NullPointer JSF - PrimeFaces

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

Troca actionListener por action e tenta colocar o “process” também:

<p:commandButton id="responderButton" value="Responder"  process="@form"
                    action="#{listaAlternativasBean.gravar}">  
   </p:commandButton>  

O seu exemple está parecendo com o do site do PrimeFaces.

Inclui o selectionMode=“single”.

&lt;p:dataTable id="alternativas" var="alternativa"  
            value="#{listaAlternativasBean.dataModel}"  
            selection="#{listaAlternativasBean.alternativaSelected}" selectionMode="single"&gt;

E também tem esse rowKey="#{car.model}", não me lembro para que serve. Procure na documentação do PrimeFaces é bem simples.

putz, na mosca.

resolvido, valeu ai galera !