JSF Klassenzugriff JSF 2.0

NoXiD

Bekanntes Mitglied
Hallo liebe Java-Gemeinde, folgendes Problem:

Ich arbeite mich gerade in JSF 2.0 ein und habe folgendes simples Programm:
Code:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class userBean {
	private String username = "Test";

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}
}
und
HTML:
<!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"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"> 

<h:head></h:head> 
<body> 
	<h1> dies ist ein Test</h1>
	#{userBean.username}
</body> 
</html>

Es sollte mir nur den "usernamen" Test aus der Bean ausgeben. Leider bekomme ich nur "#{userBean.username}" heraus :/
Ich finde den Fehler einfach nicht oO

Freundliche Grüße
 
A

Andgalf

Gast
Deine Klasse userBean sollte UserBean heißen ... das man sie dann im template mit userBean anspricht ist Konvention
 
A

Andgalf

Gast
Ok, aus i-einem Grund wird dein JSF nicht interpretiert. Als Ferndiagnose ist das jetzt schwer zu beantworten.

Auf jeden Fall nochmal die Projektkonfiguration prüfen.

web.xml
faces-config.xml
beans.xml vorhanden?
 

NoXiD

Bekanntes Mitglied
web.xml ist vorhanden, faces-config.xml auch, jedoch hab ich kein beans.xml. Brauch ich dieses auch wenn ich meine Beans mit Annotations deklariere? Bzw. wie sollte diese beans.xml aussehen?

LG
 
A

Andgalf

Gast
Ja die brauchst Du, damit der Container die Klassen nach Annotations scannt. Nach Konvention scannt der nur, wenn diese Datei vorhanden ist.

Die kann dann allerdings auch leer sein.

Benutze immer diese:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
Java EE : XML Schemas for Java EE Deployment Descriptors
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
<alternatives/>
<decorators/>
<interceptors/>
</beans>
[/XML]

Allerdings vermute ich, dass bei deiner Konfiguration noch was im argen ist, da ich eher mit einer Fehlermeldung (kann userBean nicht auswerten o.ä.) gerechnet hätte.

das er dir #{userBean.username} ausgibt lässt darauf schließen, das er den EL Ausdruck gar nicht erst interpretiert
 
Zuletzt bearbeitet von einem Moderator:

NoXiD

Bekanntes Mitglied
Hab jetzt genau die gleiche hinzugefügt, jedoch immer noch erfolglos :/

Hier mal meine Dateien (alle in WEB-INF):
faces-config.xml
HTML:
<?xml version="1.0" encoding="UTF-8"?>

<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">

</faces-config>

web.xml
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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-app_3_0.xsd">
 <display-name>Test</display-name>
 <!-- Change to "Production" when you are ready to deploy -->
  <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
  </context-param>
 <servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <!-- Map these files with JSF -->
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>
 <welcome-file-list>
  <welcome-file>/index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

beans.xml
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
      [url=http://java.sun.com/xml/ns/javaee]Java EE : XML Schemas for Java EE Deployment Descriptors[/url] 
      http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
   <alternatives/>
   <decorators/>
   <interceptors/>
</beans>
 
A

Andgalf

Gast
Na ja, wenn Du an der Konfiguration was änderst musst Du natürlich neu deployen, damit diese Änderungen wirksam werden
 

knoppers

Bekanntes Mitglied
Ja die brauchst Du, damit der Container die Klassen nach Annotations scannt. Nach Konvention scannt der nur, wenn diese Datei vorhanden ist.

Die kann dann allerdings auch leer sein.

Benutze immer diese:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
Java EE : XML Schemas for Java EE Deployment Descriptors
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
<alternatives/>
<decorators/>
<interceptors/>
</beans>
[/XML]

Allerdings vermute ich, dass bei deiner Konfiguration noch was im argen ist, da ich eher mit einer Fehlermeldung (kann userBean nicht auswerten o.ä.) gerechnet hätte.

das er dir #{userBean.username} ausgibt lässt darauf schließen, das er den EL Ausdruck gar nicht erst interpretiert

Auch wenn das Thema als erledigt gekennzeichnet ist, muss ich hier noch einmal etwas dazu schreiben.

Ein "beans.xml" ist hier auf keinen Fall notwendig, wird überhaupt nicht benötigt. Du kannst im JSF 2 die Standard-Annotations wie z.B. "ManagedBean", usw. immer verwenden. Die Datei "beans.xml" hat ganz andere Aufgaben ("CDI"), die hier aber zu beschreiben wäre zu viel und würde das Thema verfehlen.
 

Neue Themen


Oben