Hallo,
ich bin mal wieder mit meinem Latein am Ende, dabei hört sich mein Problem voll banal an...
Ich habe einen einfachen commandButton, der per action Property eine Methode aufrufen soll und diese gibt, jenachdem ob eine Variable null oder !null ist einen anderen String zurück um auf zwei unterschiedlichen Seiten weiterleiten zu können. In allen anderen Fällen, wo ich die gleiche Art und Weise zum Weiterleiten benutz habe, funktioniert es... nur bei diesem einen Button nicht. ???:L
Der Messages Tag bringt auch nichts an Fehlern für die Seite.
Die ManageBean, auf die mein Button zurgreift, um die Methode aufzurufen ist vom Scope Session, instanziiert wird diese Bean auch und auch die Initialisierung (@PostConstruct) wird aufgerufen.
Bei einem Klick auf den Button nun passiert jedoch NIX. Die Methode wird nicht einmal aufgerufen.
Ich vermute, dass das Problem durch meine Redirect Funktion entsteht, weiß jedoch nicht, was ich dort anders machen sollte, denn vor der Umstellung auf Templating mittels Apache Tiles hatte alles funktioniert.
In der Abfrage, ob ein Redirect ausgelöst werden soll oder nicht, habe ich meine Login-, Password- und Register Seite angegeben, von denen kein Redirect ausgelöst werden soll. (also !"auf angegebener Seite").
Der PhaseListener wird beim Klick auch ausgelöst, doch danach geht es nicht weiter. Daher meine Vermutung.
Mein Redirect mit einem PhaseListener:
Mein Button (soll von der PasswordSeite (PW vergessen) zurück auf die LoginSeite führen, wenn man das PW doch nicht zurück setzen lassen möchte):
Methode, die der Button aufrufen soll, es jedoch nicht tut:
Naviagtion in der faces-config.xml:
auch mit der expliziten Angabe hat es nicht funktioniert:
Tiles config (dargestellt und erreicht werden beide Seiten problemlos):
und zu guter Letzt meine Web.xml (vielleicht liegt auch hier der Fehler?)
die Grundeinstellungen für Tiles habe ich aus einem Tutorial entnommen, daher weiß ich nicht genau, ob hier auch wirklich alles richtig ist.
Entwicklunsgumgebung:
Ich benutze zurzeit Myfaces 1.2.10, Tomahawk12-1.1.10 und Apache Tiles 2.0.5 (nachdem ich gelesen hatte, dass dies die einzige Version ist, die mit Tomahawk einigermaßen läuft). Dann hab ich noch einen lokalen Tomcat 6.0 und arbeite mit Eclipse Helios.
Zuvor hatte alles funktioniert, doch ich bin gerade beim Umstieg aufs Templating und seitdem ich Tiles benutze, tauchen ständig neue Probleme auf...
Ich hoffe, mir kann hier jemand weiter helfen!
mfg
Jay
ich bin mal wieder mit meinem Latein am Ende, dabei hört sich mein Problem voll banal an...
Ich habe einen einfachen commandButton, der per action Property eine Methode aufrufen soll und diese gibt, jenachdem ob eine Variable null oder !null ist einen anderen String zurück um auf zwei unterschiedlichen Seiten weiterleiten zu können. In allen anderen Fällen, wo ich die gleiche Art und Weise zum Weiterleiten benutz habe, funktioniert es... nur bei diesem einen Button nicht. ???:L
Der Messages Tag bringt auch nichts an Fehlern für die Seite.
Die ManageBean, auf die mein Button zurgreift, um die Methode aufzurufen ist vom Scope Session, instanziiert wird diese Bean auch und auch die Initialisierung (@PostConstruct) wird aufgerufen.
Bei einem Klick auf den Button nun passiert jedoch NIX. Die Methode wird nicht einmal aufgerufen.
Ich vermute, dass das Problem durch meine Redirect Funktion entsteht, weiß jedoch nicht, was ich dort anders machen sollte, denn vor der Umstellung auf Templating mittels Apache Tiles hatte alles funktioniert.
In der Abfrage, ob ein Redirect ausgelöst werden soll oder nicht, habe ich meine Login-, Password- und Register Seite angegeben, von denen kein Redirect ausgelöst werden soll. (also !"auf angegebener Seite").
Der PhaseListener wird beim Klick auch ausgelöst, doch danach geht es nicht weiter. Daher meine Vermutung.
Mein Redirect mit einem PhaseListener:
Java:
package de.webproject.mytest.listener;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import de.webproject.mytest.model.Model;
import de.webproject.mytest.model.UserVerwaltung;
public class SessionPhaseListener implements PhaseListener {
private static final long serialVersionUID = 1L;
private HttpServletRequest request;
private HttpSession session;
private Model mmod;
public void afterPhase(PhaseEvent event) {
System.out.println("afterPhase() Anfang");
request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
session = request.getSession();
UserVerwaltung verw = UserVerwaltung.getInstanz();
mmod = verw.getUserModel(session);
FacesContext fc = event.getFacesContext();
/* Abfrage:
* mmod == null -> wenn User nicht eingelogt
* !FacesContext.getCurrentInstance().getViewRoot().getViewId().equals("/webabo/password.jsp") ->
* wenn aktuelle Seite nicht "/webabo/password.jsp" ist
* !FacesContext.getCurrentInstance().getViewRoot().getViewId().equals("/webabo/login.jsp") ->
* wenn aktuelle Seite nicht "/webabo/login.jsp" ist
*
* => dann Redirect auf Login Seite
*/
if(mmod==null && !fc.getViewRoot().getViewId().equals("/webabo/password.jsp")
&& !fc.getViewRoot().getViewId().equals("/webabo/login.jsp")
&& !fc.getViewRoot().getViewId().equals("/webabo/register.jsp")) {
NavigationHandler nav = fc.getApplication().getNavigationHandler();
System.out.println("redirect");
nav.handleNavigation(fc, null, "logout");
}
}
public void beforePhase(PhaseEvent event) {/* ignore */}
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}
Mein Button (soll von der PasswordSeite (PW vergessen) zurück auf die LoginSeite führen, wenn man das PW doch nicht zurück setzen lassen möchte):
Code:
<h:commandButton value="<- Login" action="#{passwordController.backTo}"/>
Methode, die der Button aufrufen soll, es jedoch nicht tut:
Java:
public String backTo() {
System.out.println("PWContr: backTo()");
reset();
if(mmod!=null) {
System.out.println("back to userdata");
return "userdata";
} else {
System.out.println("back to login");
return "logout";
}
}
Naviagtion in der faces-config.xml:
Code:
<navigation-rule>
<from-view-id>/webabo/*</from-view-id>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/webabo/login.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>home</from-outcome>
<to-view-id>/webabo/mainpage.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>subscription</from-outcome>
<to-view-id>/webabo/subscription.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>list</from-outcome>
<to-view-id>/webabo/overview.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>contact</from-outcome>
<to-view-id>/webabo/contact.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>userdata</from-outcome>
<to-view-id>/webabo/userdata.jsp</to-view-id>
</navigation-case>
</navigation-rule>
auch mit der expliziten Angabe hat es nicht funktioniert:
Java:
<navigation-rule>
<from-view-id>/webabo/password.jsp</from-view-id>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/webabo/login.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Tiles config (dargestellt und erreicht werden beide Seiten problemlos):
Java:
<!-- Login ====================================================== -->
<definition name="/webabo/login.tiles" extends="single.main">
<put-attribute name="title" value="WebAbo Login" />
<put-attribute name="content" value="/views/tiles/login/content.jsp" />
</definition>
<!-- Password =================================================== -->
<definition name="/webabo/password.tiles" extends="single.main">
<put-attribute name="title" value="WebAbo Pasword" />
<put-attribute name="content" value="/views/tiles/password/content.jsp" />
</definition>
und zu guter Letzt meine Web.xml (vielleicht liegt auch hier der Fehler?)
die Grundeinstellungen für Tiles habe ich aus einem Tutorial entnommen, daher weiß ich nicht genau, ob hier auch wirklich alles richtig ist.
Code:
<?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"
id="WebApp_ID" version="2.5">
<display-name>webabo</display-name>
<listener>
<listener-class>de.webproject.ws.jsf.test09.listener.TimeoutSessionListener</listener-class>
</listener>
<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>*.faces</url-pattern>
</servlet-mapping>
<!-- Welcome Seite ================================================ -->
<welcome-file-list>
<welcome-file>/webabo/login.faces</welcome-file>
</welcome-file-list>
<!-- Make it sure to add myfaces servlet to make use of MyFacesExtensions Filter -->
<servlet>
<servlet-name>faces</servlet-name>
<servlet-class>org.apache.myfaces.webapp.MyFacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>faces</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
<!--
Session Config - Timeout
-->
<session-config>
<session-timeout>5</session-timeout>
</session-config>
<!-- APACHE TILES ================================================= -->
<context-param>
<param-name>tiles-definitions</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>
<!--
Tomahawk Extensions Filter
-->
<filter>
<filter-name>extensionsFilter</filter-name>
<filter-class>
org.apache.myfaces.webapp.filter.ExtensionsFilter
</filter-class>
<init-param>
<description>
Set the size limit for uploaded files. Format: 10 - 10
bytes 10k - 10 KB 10m - 10 MB 1g - 1 GB
</description>
<param-name>uploadMaxFileSize</param-name>
<param-value>20m</param-value>
</init-param>
<init-param>
<description>
Set the threshold size - files below this limit are
stored in memory, files above this limit are stored on
disk.
Format: 10 - 10 bytes 10k - 10 KB 10m - 10 MB 1g - 1 GB
</description>
<param-name>uploadThresholdSize</param-name>
<param-value>100k</param-value>
</init-param>
</filter>
<!-- MYFACES EXTENSIONS ========================================== -->
<!-- This extensions are required for jscookmenu -->
<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
</filter>
<!--
extension mapping for adding <script/>, <link/>, and other resource
tags to JSF-pages
-->
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>*.faces</url-pattern>
</filter-mapping>
<!--
extension mapping for serving page-independent resources
(javascript, stylesheets, images, etc.)
-->
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
<!--
List required and recommended of context parameter
-->
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>facelets.SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.PRETTY_HTML</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.tiles.definition.DefinitionsFactory.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles-defs.xml</param-value>
</context-param>
</web-app>
Entwicklunsgumgebung:
Ich benutze zurzeit Myfaces 1.2.10, Tomahawk12-1.1.10 und Apache Tiles 2.0.5 (nachdem ich gelesen hatte, dass dies die einzige Version ist, die mit Tomahawk einigermaßen läuft). Dann hab ich noch einen lokalen Tomcat 6.0 und arbeite mit Eclipse Helios.
Zuvor hatte alles funktioniert, doch ich bin gerade beim Umstieg aufs Templating und seitdem ich Tiles benutze, tauchen ständig neue Probleme auf...
Ich hoffe, mir kann hier jemand weiter helfen!
mfg
Jay