Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    116

    [JSF] Il tragico errore del venerdì sera..

    Sono sempre infognato nel solito tutorial dell'ibm per le jsf..

    Ad un certo punto mentre gestivo la navigazione mi capita un errore che ho esplorato un pò e scremando un pò di roba sono giunto al succo:

    Con questo codice funziona normalmente:
    codice:
        <div>
          <h:commandButton action="#{calculatorController.add}"  value="Add" />
          <h:commandButton action="#{calculatorController.multiply}"  value="Multiply" />
          <h:commandButton action="#{calculatorController.divide}"  value="Divide" />
          <h:commandButton action="#{calculatorController.clear}"  value="Clear"
              immediate="true"/>
        </div>
    
        <h:panelGroup binding="#{calculatorController.resultsPanel}" rendered="false">
    	  <h4>Results</h4>
    	   <h:panelGrid columns="1" rowClasses="oddRow, evenRow"
    	    styleClass="resultGrid">
    	    <h:outputText value="First Number  #{calculatorController.calculator.firstNumber}"/>
    	    <h:outputText value="Second Number #{calculatorController.calculator.secondNumber}"/>
    	    <h:outputText value="Result  #{calculatorController.calculator.result}"/>
    	   </h:panelGrid>
      	</h:panelGroup>
    ma quando tolgo l'ultimo panelgroup lasciando solo:
    codice:
        <div>
          <h:commandButton action="#{calculatorController.add}"  value="Add" />
          <h:commandButton action="#{calculatorController.multiply}"  value="Multiply" />
          <h:commandButton action="#{calculatorController.divide}"  value="Divide" />
          <h:commandButton action="#{calculatorController.clear}"  value="Clear"
              immediate="true"/>
        </div>
    Quando clicco su un pulsante qualsiasi mi appare l'errore:
    codice:
    Error calling action method of component with id calcForm:j_id_jsp_1335438281_13
    
    Caused by:
    java.lang.NullPointerException - /pages/calculator.jsp(41,6) '#{calculatorController.clear}' java.lang.NullPointerException
    Questo è il codice della clear (le altre 4 operazioni sono simili)
    codice:
    public String clear() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
    
        try {
          calculator.clear();
          resultsPanel.setRendered(false);
          facesContext.addMessage(null, new FacesMessage(
              FacesMessage.SEVERITY_INFO, "Results cleared", null));
    
        } catch (Exception ex) {
          resultsPanel.setRendered(false);
          facesContext.addMessage(null,
              new FacesMessage(FacesMessage.SEVERITY_ERROR, ex.getMessage(), null));
        }
        return null;
      }
    Ma com'è possibile??
    Il Bean c'è (infatti funziona nel primo caso).. com'è possibile che togliendo quel codice si sputtani così?
    Cosa c'è lì dentro di indispensabile?


    Scusate il titolo poco tecnico, ma quando accadono queste cose il venerdì sera un pò cadono le

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    116
    Altri test:

    la scritta incriminata è:
    codice:
    <h:panelGroup binding="#{calculatorController.resultsPanel}" rendered="false">
    <h4>Results</h4>
    	   <h:panelGrid columns="1" rowClasses="oddRow, evenRow"
    	    styleClass="resultGrid">
    	    <h:outputText value="First Number  #{calculatorController.calculator.firstNumber}"/>
    	    <h:outputText value="Second Number #{calculatorController.calculator.secondNumber}"/>
    	    <h:outputText value="Result  #{calculatorController.calculator.result}"/>
    	   </h:panelGrid>
      	</h:panelGroup>
    Se io lascio solo:
    codice:
    <h4>Results</h4>
    	   <h:panelGrid columns="1" rowClasses="oddRow, evenRow"
    	    styleClass="resultGrid">
    	    <h:outputText value="First Number  #{calculatorController.calculator.firstNumber}"/>
    	    <h:outputText value="Second Number #{calculatorController.calculator.secondNumber}"/>
    	    <h:outputText value="Result  #{calculatorController.calculator.result}"/>
    	   </h:panelGrid>
    si spacca, se invece lascio solo:
    codice:
    <h:panelGroup binding="#{calculatorController.resultsPanel}" rendered="false">
    
    </h:panelGroup>
    non mi da errori!

    Per qualche motivo a me oscuro con quel binding non mi genera errori quando chiamo il metodo..
    Ma non riesco a capire perchè!!

  3. #3
    Be se ti soffermarsi a capire cosa fa il "binding" forse lo capiresti !
    Cmq binding non fa altro che "bindare" associare un qualcosa (componente) sul backing bean. Nel tuo caso specifico
    codice:
    <h:panelGroup binding="#{calculatorController.resultsPanel}">
    Questa riga di codice va ad associare questo panelGroup alla proprietà resultsPanel del backingBean "calculatorController".
    Se togli questo panelGroup ovviamente la proprietà resultsPanel non verrà mai inizilizzata e quindi va a generare un NullPointerExcpetion nel metodo clear quando vai a chiamare il metodo setRendered(false)
    codice:
    public String clear() {
          .....
          resultsPanel.setRendered(false);
          .....
    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    116
    Giustissimo...

    In effetti bastava ragionarci su un poco di più.. suvvia, era venerdì sera

    Ora mi è più chiara la connessione tra gli elementi della pagina e la classe controller, ma mi chiedo:

    Se io volessi spostare il panelGroup dei risultati su un altra pagina, in modo che al click si muova verso la nuova pagina e visualizzi lì il risultato, è possibile realizzarlo con un solo controller?

  5. #5
    Il controller può essere tranquillamente uno. L'importare è gestire bene il binding nelle varie action in quanto, come ti ho spiegato prima, se nella pagina nonè presente il componente, nel controlle la proprietà sarà null.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.