[JSF] NullPointerException podczas wywoływania akcji

0

Witam,

Mam pewien problem z JSF. Podczas klikania w button, powinna zostać wywołana akcja (przetworzenie metody i przejście na inną stronę). Tym czasem dostaję komunikat błędu NullPointerException. Dodam tylko, że błąd ten pojawiać się zaczął w momencie gdy do projektu dodałem biblioteki RichFaces oraz zarejestrowałem je w web.xml

Poniżej przedstawiam kod:

  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    
  <context-param>
    <param-name>org.richfaces.SKIN</param-name>
    <param-value>blueSky</param-value>
  </context-param>

  <!-- Making the RichFaces skin spread to standard HTML controls -->
  <context-param>
   <param-name>org.richfaces.CONTROL_SKINNING</param-name>
   <param-value>enable</param-value>
  </context-param>
 
  <!-- Defining and mapping the RichFaces filter -->
  <filter> 
    <display-name>RichFaces Filter</display-name> 
    <filter-name>richfaces</filter-name> 
    <filter-class>org.ajax4jsf.Filter</filter-class> 
  </filter> 
  
  <filter-mapping> 
    <filter-name>richfaces</filter-name> 
    <servlet-name>Faces Servlet</servlet-name>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>
  
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  
  <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
  </context-param>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
  <listener>
	<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
  </listener>
</web-app>

W google znalazłem, że dodanie ConfigureListenera powinno rozwiązać problem. W moim przypadku jednak tak nie jest. Pracuje na serwerze Tomcat 6.0 oraz używam Eclipsa Helios.

W pliku index.jsp robię przekierowanie <% response.sendRedirect("nbarFilteringNetworkTraffic.jsf"); %> Strona się ładuje a jej kod wygląda w następujący sposób.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
	<h:head>
		<title>JSF 2.0: Bean Properties for Request Parameters</title>
	</h:head>
	
	<h:body>
		<div align="center">
			<h:form>
			<fieldset>
  				<legend>NbarFilteringNetworkTraffic</legend>
  				<h:commandButton value="Show NBAR statistics" action="#{nbarFilteringNetworkTraffic.showNbarStatistics}"/>
			</fieldset>
			</h:form>
		</div>
	</h:body>
</html>

Kliknięcie buttona nie wywołuje metody klasy nbarFilteringNetworkTraffici zwraca błąd w postaci NullPointerException. Czym jest spowodowany ten błąd? Wydaje mi się, że kod wygląda poprawnie. Wszystkie niezbędne biblioteki znajdują się w libie a consola serwera nie wyświetla błędów.

Proszę o pomoc
Pozdrawiam

0

a gdzie masz konfiguracje faces-config.xml?? definijesz tam w ogole jakies beans?

0

Mam. Prezentuję poniżej:

<?xml version="1.0"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
   version="2.0">
   
   <managed-bean>
      <description>NbarFiltering Bean</description>
      <managed-bean-name>NbarFilteringNetworkTraffic</managed-bean-name>
      <managed-bean-class>client.NbarFilteringNetworkTraffic</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
      <managed-property>
         <property-name>nbars</property-name>
         <property-class>java.util.Vector</property-class>
         <value/>
      </managed-property>
   </managed-bean>
</faces-config>

Managed Bean:

package client;

import java.util.Vector;

import javax.faces.bean.ManagedBean;

import org.snmp4j.smi.OID;

import utils.SnmpUtils;
import entity.NbarEntity;

@ManagedBean
public class NbarFilteringNetworkTraffic {
	
	private Vector<NbarEntity> nbars = new Vector<NbarEntity>();
	private String address = "udp:192.168.1.100/161";
	private final OID OID_PROTOCOL_NAME = new OID("1.3.6.1.4.1.9.9.244.1.2.1.1.2.2.0");
	private final OID OID_PACKET_COUT_OF_INBOUND = new OID("1.3.6.1.4.1.9.9.244.1.2.1.1.3.2.0");
	private final OID OID_PACKET_COUT_OF_OUTBOUND = new OID("1.3.6.1.4.1.9.9.244.1.2.1.1.4.2.0");
	private final OID OID_BYTE_COUT_OF_INBOUND = new OID("1.3.6.1.4.1.9.9.244.1.2.1.1.5.2.0");
	private final OID OID_BYTE_COUT_OF_OUTBOUND = new OID("1.3.6.1.4.1.9.9.244.1.2.1.1.6.2.0");
	private final OID OID_INBOUND_BIT_RATE = new OID("1.3.6.1.4.1.9.9.244.1.2.1.1.11.2.0");
	private final OID OID_OUTBOUND_BIT_RATE = new OID("1.3.6.1.4.1.9.9.244.1.2.1.1.12.2.0");
	
	public Vector<NbarEntity> getNbars() {
		return nbars;
	}

	public void setNbars(Vector<NbarEntity> nbars) {
		this.nbars = nbars;
	}
	
	public String showNbarStatistics() {
		NbarEntity nbarElement;
		Vector<NbarEntity> vectorEntity = new Vector<NbarEntity>();
		
		Vector<String> protocolVector = SnmpUtils.getTreeForOid(address, OID_PROTOCOL_NAME);
		Vector<String> inboundPacketVector = SnmpUtils.getTreeForOid(address, OID_PACKET_COUT_OF_INBOUND);
		Vector<String> outboundPacketVector = SnmpUtils.getTreeForOid(address, OID_PACKET_COUT_OF_OUTBOUND);
		Vector<String> inboundByteVector = SnmpUtils.getTreeForOid(address, OID_BYTE_COUT_OF_INBOUND);
		Vector<String> outboundByteVector = SnmpUtils.getTreeForOid(address, OID_BYTE_COUT_OF_OUTBOUND);
		Vector<String> inboundBitRateVector = SnmpUtils.getTreeForOid(address, OID_INBOUND_BIT_RATE);
		Vector<String> outboundBitRateVector = SnmpUtils.getTreeForOid(address, OID_OUTBOUND_BIT_RATE);
		
		for (int elementNumber = 0; elementNumber < protocolVector.size(); elementNumber++) {
			nbarElement = new NbarEntity();
			nbarElement.setProtocolName(protocolVector.get(elementNumber));
			nbarElement.setInboundPacketCount(inboundPacketVector.get(elementNumber));
			nbarElement.setOutboundPacketCount(outboundPacketVector.get(elementNumber));
			nbarElement.setInboundByteCount(inboundByteVector.get(elementNumber));
			nbarElement.setOutboundByteCount(outboundByteVector.get(elementNumber));
			nbarElement.setInboundBitRate(inboundBitRateVector.get(elementNumber));
			nbarElement.setOutboundBitRate(outboundBitRateVector.get(elementNumber));
			vectorEntity.add(nbarElement);
		}
		
		setNbars(vectorEntity);
		return("nbarStatistic");
	}
}

Dziwne, że nie działa :/ Bez RichFaces działało pięknie. A potrzebuję skorzystać z Poll w RichFaces by odświeżać tabelę statystyk. Chyba, że ma ktoś jakiś inny pomysł. Nie będę ukrywał, że chciałbym rozwiązać ten problem.

Pozdrawiam

Aha. I żeby nie było niejasności. Vector nbars zawsze pobierze jakieś wpisy i jest to sprawdzone. W celu zdebugowania usunąłem też całą treść z metody showNbarStatistics (zostawiłem jedynie return("nbarStatistic");) i dalej zwraca NullPointException.

0

w faces-config.xml definiujesz nazwe bean zaczynajac z duzej litery
<managed-bean-name>NbarFilteringNetworkTraffic</managed-bean-name>
a w kodzie uzywasz nazwy zaczynajac z malej
action="#{nbarFilteringNetworkTraffic ...

0

Ujednoliciłem wielkość liter. Niestety to dalej nie chodzi o to :( NullPointException :( Macie jeszcze jakieś pomysły?

0

Czy nikt naprawdę nie spotkał się z takim problemem? Powiedziecie chociaż czy kod jest poprawny. Jeśli kod wygląda dobrze to będę szukał przyczyn gdzie indziej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1