# JSF: Button reagiert nicht und nicht verständliche Warnung



## A.T. (20. Feb 2008)

Hallo zusammen,

habe ja schon das eine odere andere zu JSF gefragt. Danke erst mal an alle die mir schon geholfen haben, bin auch schon ein wenig weiter gekommen. Aber leider geht es nicht immer weiter.

Verwende MyFaces 1.1.5 und Tomcat 5.5.26

Meine login.jsp wird angezeigt(http://localhost:8080/JSFTutorial/login.jsf). Wenn ich allerdings in die Textfelder etwas eintrage(wird nicht wirklich geprüft) und dann den Button drücke passiert nichts. Außer einer merkwürdigen Warnung.

```
20.02.2008 14:53:41 org.apache.myfaces.renderkit.html.HtmlLabelRenderer encodeBegin
WARNUNG: Attribute 'for' of label component with id _idJsp0:_idJsp3 is not defined
20.02.2008 14:53:41 org.apache.myfaces.renderkit.html.HtmlLabelRenderer encodeBegin
WARNUNG: Attribute 'for' of label component with id _idJsp0:_idJsp5 is not defined
```
Weiß nicht wirklich was ich damit anfangen soll.

Was aber schlimmer ist das er nicht die Seite wechselt. Ich vermute das es mit der _action_ des Buttons und der  _navigation-rule_ zusammen hängt. Bei _from-action_ wird auch noch diese Warnung angezeigt: _EL expressions must be of the form #{expression}_. Allerdings habe ich das ausprobiert und damit auch keien Änderung im Verhalten erreicht. Poste jetzt mal meine Dateien und hoffe das mir jemand helfen kann! Schon mal vielen Dank! Hoffe ihr könnt den Fehler ohne viel Arbeit für euch finden!

*faces-config.xml*

```
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE faces-config PUBLIC
    "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
    "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>
<application>
		<locale-config>
			<default-locale>en</default-locale>
			<supported-locale>de</supported-locale>
		</locale-config>
	</application>
	<managed-bean>
		<managed-bean-name>loginBean</managed-bean-name>
		<managed-bean-class>com.tutorial.LoginBean</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
	<navigation-rule>
		<display-name>login</display-name>
		<from-view-id>/login.jsp</from-view-id>
		<navigation-case>
			<from-action>#{login}</from-action>
			<to-view-id>/welcome.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
</faces-config>
```
*login.jsp*

```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<f:view>
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
	<title>JSF Tutorial</title>
	<f:loadBundle basename="com.tutorial.messages" var="msg" />
	</head>
	<body>
	<h:form>
		<h:messages layout="table"></h:messages>
		<h:panelGrid columns="2">
			<h:outputLabel rendered="true" value="#{msg.name}"></h:outputLabel>
			<h:inputText value="#{loginBean.name}" tabindex="0"></h:inputText>
			<h:outputLabel rendered="true" value="#{msg.password}"></h:outputLabel>
			<h:inputSecret value="#{loginBean.password.convertedID}">
				<f:converter converterId="javax.faces.Long" />
			</h:inputSecret>
		</h:panelGrid>
		<h:commandButton action="login" value="#{msg.login}"></h:commandButton>
	</h:form>
	</body>
</f:view>
</html>
```
*web.xml*

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp_ID">
	<display-name>JSFTutorial</display-name>
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>
		javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
</web-app>
```
Falls noch mehr Datein benötigt werden bitte bescheid geben.

Danke!
Gruß
A.T.


----------



## maki (20. Feb 2008)

Irgendwelche messages? 

Bei so kann Facestrace sehr hilfreich sein.


----------



## Reeny (20. Feb 2008)

Zu den Warnungen kann ich was sagen:

Du wirst gewarnt, dass du für deine OutputLabels kein "for"-Attribut gesetzt hast. Ein Label hat ja eigentlich "nur Sinn", wenn es einem Element zugeordnet ist. Zum Beispiel so:


```
<h:outputLabel rendered="true" value="#{msg.name}" for="loginname_id"></h:outputLabel>
<h:inputText id="loginname_id" value="#{loginBean.name}" tabindex="0"></h:inputText>
```


----------



## A.T. (21. Feb 2008)

@Reeny Danke für den Hinweis! Die warunungen sind damit weg!
@maki Was für Messages meinst du? Facetrace werde ich mal ausprobieren.

Aber falls noch einer einen Hinweis wegen des Buttons hat bitte bescheid geben! Danke!


----------



## maki (21. Feb 2008)

Messages von Konvertoren oder Validatoren eben..


----------



## Reeny (21. Feb 2008)

Um *Maki* zu unterstützen:

Du musst eine Art "Message-Textarea" in deine Seite mit einbauen, wo dann alle Validierungs- und Konverterfehler angezeigt werden.


```
<c:if test="#{!(empty facesContext.maximumSeverity)}">
	<div style="overflow:auto; width:100%;">
		<h:messages layout="table" showDetail="true" showSummary="false" id="text_fehlermeldungen" errorClass="ErrorClass" rendered="#{! empty facesContext.maximumSeverity}"/>
	</div>
</c:if>
```


----------



## A.T. (21. Feb 2008)

@maki und Reeny habe mir das mit den Messages jetzt mal angeguckt. Scheint eine sehr gute Sache zu sein. Allerdings habe ich es noch nicht intensiv ausprobiert. Werde das aber auf jeden fall mal machen. Danke für eure Hilfe! Es kommen garantiert noch andere Fragen... :roll:   

Habe mein Problem inzwischen gelöst, der Button funktioniert und es wird die zweite Seite angezeigt.
Dazu habe ich die navigation-rule in der faces-vonfig.xml korrigiert sowie die action des Buttons in der login.jsp geändert. Ach so die Funktion login aus meiner loginBean gibt im moment einfach immer success zurück. 

*faces-config.xml*

```
<navigation-rule>
		<description>Der Login</description>
		<from-view-id>/login.jsp</from-view-id>
		<navigation-case>
			<from-outcome>success</from-outcome>
			<to-view-id>/welcome.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
```
*login.jsp*

```
<h:commandButton action="#{loginBean.login}" value="#{msg.login}"></h:commandButton>
```


----------

