You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by AMIR-TAHMASSEB Marc Kamran <ma...@ombudsman.europa.eu> on 2010/12/01 08:29:40 UTC

problem with Input text fields and Filter

Dear all,
 
Since I added a custom filter to deal with the local language, I have some problems with some of my forms :-(
 
I user myfaces 1.1.8 + Tomcat 1.1.10 + jsf-faceletes 1.1.14 on a Tomcat 6 server with JDK 1.5 and j2ee-1.4
 
Here is my problem : 
I have a contact form and when I submit my form the page is refreshed but nothing happens and the action is not done.
Every thing worked well until I added a new filter (LocalLanguageFilter) to deal with the language of navigation.
Before my links where like this : http://www.ombudsman.europa.eu/shortcuts/contacts.faces <http://www.ombudsman.europa.eu/shortcuts/contacts.faces> 
With the filter they will be like this : (http://www.ombudsman.europa.eu/en/shortcuts/contacts.faces) 
The filter seems to work fine with anything but the Input Text fields :-(
 
In my form I have something like that :

	<h:commandLink id="sendButton" action="#{contactForm.send}" 
	title="#{session.messages.shortcuts_contactform_send}">
	    #{session.messages.shortcuts_contactform_send}
	</h:commandLink>

In my web.xml I have this filter :

	 <filter>
	  <filter-name>localLanguageFilter</filter-name>
	  <filter-class>
	   ec.ep.eo.eoweb.filter.LocalLanguageFilter
	  </filter-class>
	 </filter>
	 
	 <filter-mapping>
	  <filter-name>localLanguageFilter</filter-name>
	  <url-pattern>*.faces</url-pattern>    
	 </filter-mapping>

In my faces-config :

	<managed-bean>
	    <managed-bean-name>contactForm</managed-bean-name>
	    <managed-bean-class>ec.ep.eo.eoweb.presentation.bean.form.ContactForm</managed-bean-class>
	    <managed-bean-scope>session</managed-bean-scope>
	    <managed-property>
	        <property-name>services</property-name>
	        <value>#{EOWebServicesImpl}</value>
	    </managed-property>
	</managed-bean>

	<navigation-rule>
	    <from-view-id>*</from-view-id>
	    <navigation-case>
	        <from-outcome>go_contacts</from-outcome>
	        <to-view-id>/shortcuts/contacts.xhtml</to-view-id>
	        <redirect />
	    </navigation-case>
	</navigation-rule>

In my ContactForm, I have a send() method that is never reched :-( :

	public synchronized String send() {
	    (some action to send an email....)
	}

And finaly, here is my LocalLanguageFilter :

	public class LocalLanguageFilter implements Filter {

		...
		public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

			HttpServletRequest request = (HttpServletRequest) servletRequest;
			HttpServletResponse response = (HttpServletResponse) servletResponse;
			String originalUri = request.getRequestURI().toLowerCase();
			String uri = originalUri;
			String contextPath = request.getContextPath().toLowerCase();
			if (uri.startsWith(contextPath)) {
			    uri = uri.substring(contextPath.length());
			}
			String[] parts = uri.split(Constants.PATTERN_SLASH);
			if (parts.length>0 && parts[1].length()==2) {
			    String languageCode=parts[1];
			    uri = uri.substring(3);
			    ILanguage language = getServices().findLanguageByBusinessKey(languageCode);
			    if (language==null) {
			        language=Constants.ENGLISH;
			    }
			    request.getSession().setAttribute(Constants.SYSTEM_LANGUAGE, language);
			}

			request.getRequestDispatcher(uri).forward(request, response);

		}

		...

	}

Thanks in advance for you help
 
Marc
 
 
 
 

Médiateur européen

Marc Kamran Amir-Tahmasseb

Unité Communication - Développeur web

T. +33 (0)3 88 17 44 10

marc.amir-tahmasseb@ombudsman.europa.eu <ma...@ombudsman.europa.eu> 

1 avenue du Président Robert Schuman

CS 30403

F - 67001 Strasbourg Cedex

T. + 33 (0)3 88 17 23 13

F. + 33 (0)3 88 17 90 62

www.ombudsman.europa.eu <http://www.ombudsman.europa.eu/> 

 

 

 

RE: problem with Input text fields and Filter

Posted by AMIR-TAHMASSEB Marc Kamran <ma...@ombudsman.europa.eu>.
Dear Jakob,

Thanks for your reply !
After investigation, my problematic pages where only pages with  an inputFileUpload components.

For these pages I added an exception for my filter in the web.xml :
	<filter>
		<filter-name>localLanguageFilter</filter-name>
		 <init-param>
		  <param-name>EXCEPTION_URL_0</param-name>
		  <param-value>/shortcuts/contacts.faces</param-value>		  
	    </init-param>
		<filter-class>
			ec.ep.eo.eoweb.filter.LocalLanguageFilter
		</filter-class>
	</filter>

And then in my filter I get this exception and user filterChan.doFilter
For all other pages I use request.getRequestDispatcher(uri).forward(request, response)

I found some interesting help also here :
http://www.developpez.net/forums/d287090/java/developpement-web-java/frameworks/jsf/utiliser-filtre/

Regards,

Marc

>-----Original Message-----
>From: sethfromaustria@gmail.com 
>[mailto:sethfromaustria@gmail.com] On Behalf Of Jakob Korherr
>Sent: 01 December 2010 17:11
>To: MyFaces Discussion
>Subject: Re: problem with Input text fields and Filter
>
>Hi Marc,
>
>I guess the problem may come from the fact that you're using
>
>request.getRequestDispatcher(uri).forward(request, response);
>
>in the Filter instead of filterChain.doFilter(...);
>
>And this is somehow causing your values not to be submitted 
>which means process-validations will fail and thus your action 
>method isn't called. However I don't really know why this happens.
>
>Try to download the source of your MyFaces version and debug 
>through a whole request. Then you'll see what really happens 
>and where the problem is!
>
>Regards,
>Jakob
>
>
>2010/12/1 AMIR-TAHMASSEB Marc Kamran 
><ma...@ombudsman.europa.eu>
>>
>> Dear all,
>>
>> Since I added a custom filter to deal with the local 
>language, I have 
>> some problems with some of my forms :-(
>>
>> I user myfaces 1.1.8 + Tomcat 1.1.10 + jsf-faceletes 1.1.14 on a 
>> Tomcat 6 server with JDK 1.5 and j2ee-1.4
>>
>> Here is my problem :
>> I have a contact form and when I submit my form the page is 
>refreshed but nothing happens and the action is not done.
>> Every thing worked well until I added a new filter 
>(LocalLanguageFilter) to deal with the language of navigation.
>> Before my links where like this : 
>> http://www.ombudsman.europa.eu/shortcuts/contacts.faces
>> With the filter they will be like this : 
>> (http://www.ombudsman.europa.eu/en/shortcuts/contacts.faces)
>> The filter seems to work fine with anything but the Input 
>Text fields 
>> :-(
>>
>> In my form I have something like that :
>>
>> <h:commandLink id="sendButton" action="#{contactForm.send}"
>> title="#{session.messages.shortcuts_contactform_send}">
>>     #{session.messages.shortcuts_contactform_send}
>> </h:commandLink>
>>
>> In my web.xml I have this filter :
>>
>>  <filter>
>>   <filter-name>localLanguageFilter</filter-name>
>>   <filter-class>
>>    ec.ep.eo.eoweb.filter.LocalLanguageFilter
>>   </filter-class>
>>  </filter>
>>
>>  <filter-mapping>
>>   <filter-name>localLanguageFilter</filter-name>
>>   <url-pattern>*.faces</url-pattern>
>>  </filter-mapping>
>>
>> In my faces-config :
>>
>> <managed-bean>
>>     <managed-bean-name>contactForm</managed-bean-name>
>>     
>> 
><managed-bean-class>ec.ep.eo.eoweb.presentation.bean.form.ContactForm<
>> /managed-bean-class>
>>     <managed-bean-scope>session</managed-bean-scope>
>>     <managed-property>
>>         <property-name>services</property-name>
>>         <value>#{EOWebServicesImpl}</value>
>>     </managed-property>
>> </managed-bean>
>>
>> <navigation-rule>
>>     <from-view-id>*</from-view-id>
>>     <navigation-case>
>>         <from-outcome>go_contacts</from-outcome>
>>         <to-view-id>/shortcuts/contacts.xhtml</to-view-id>
>>         <redirect />
>>     </navigation-case>
>> </navigation-rule>
>>
>> In my ContactForm, I have a send() method that is never reched :-( :
>>
>> public
>>
>> synchronized String send() {
>>     (some action to send an email....) }
>>
>> And finaly, here is my LocalLanguageFilter :
>>
>> public class LocalLanguageFilter implements Filter {
>>
>> ...
>>
>> public void
>>
>> doFilter(ServletRequest servletRequest, ServletResponse 
>> servletResponse, FilterChain filterChain) throws IOException, 
>> ServletException {
>>
>> HttpServletRequest request = (HttpServletRequest) servletRequest; 
>> HttpServletResponse response = (HttpServletResponse) 
>servletResponse; 
>> String originalUri = request.getRequestURI().toLowerCase();
>> String uri = originalUri;
>> String contextPath = request.getContextPath().toLowerCase();
>> if (uri.startsWith(contextPath)) {
>>     uri = uri.substring(contextPath.length());
>> }
>> String[] parts = uri.split(Constants.PATTERN_SLASH);
>> if (parts.length>0 && parts[1].length()==2) {
>>     String languageCode=parts[1];
>>     uri = uri.substring(3);
>>     ILanguage language = 
>> getServices().findLanguageByBusinessKey(languageCode);
>>     if (language==null) {
>>         language=Constants.ENGLISH;
>>     }
>>     request.getSession().setAttribute(Constants.SYSTEM_LANGUAGE, 
>> language); }
>>
>> request.getRequestDispatcher(uri).forward(request, response);
>>
>> }
>>
>> ...
>>
>> }
>>
>> Thanks in advance for you help
>>
>> Marc
>>
>>
>>
>>
>> Médiateur européen
>>
>> Marc Kamran Amir-Tahmasseb
>>
>> Unité Communication - Développeur web
>>
>> T. +33 (0)3 88 17 44 10
>>
>> marc.amir-tahmasseb@ombudsman.europa.eu
>>
>> 1 avenue du Président Robert Schuman
>>
>> CS 30403
>>
>> F - 67001 Strasbourg Cedex
>>
>> T. + 33 (0)3 88 17 23 13
>>
>> F. + 33 (0)3 88 17 90 62
>>
>> www.ombudsman.europa.eu
>>
>>
>>
>>
>>
>>
>
>
>--
>Jakob Korherr
>
>blog: http://www.jakobk.com
>twitter: http://twitter.com/jakobkorherr
>work: http://www.irian.at
>

Re: problem with Input text fields and Filter

Posted by Jakob Korherr <ja...@gmail.com>.
Hi Marc,

I guess the problem may come from the fact that you're using

request.getRequestDispatcher(uri).forward(request, response);

in the Filter instead of filterChain.doFilter(...);

And this is somehow causing your values not to be submitted which
means process-validations will fail and thus your action method isn't
called. However I don't really know why this happens.

Try to download the source of your MyFaces version and debug through a
whole request. Then you'll see what really happens and where the
problem is!

Regards,
Jakob


2010/12/1 AMIR-TAHMASSEB Marc Kamran <ma...@ombudsman.europa.eu>
>
> Dear all,
>
> Since I added a custom filter to deal with the local language, I have some problems with some of my forms :-(
>
> I user myfaces 1.1.8 + Tomcat 1.1.10 + jsf-faceletes 1.1.14 on a Tomcat 6 server with JDK 1.5 and j2ee-1.4
>
> Here is my problem :
> I have a contact form and when I submit my form the page is refreshed but nothing happens and the action is not done.
> Every thing worked well until I added a new filter (LocalLanguageFilter) to deal with the language of navigation.
> Before my links where like this : http://www.ombudsman.europa.eu/shortcuts/contacts.faces
> With the filter they will be like this : (http://www.ombudsman.europa.eu/en/shortcuts/contacts.faces)
> The filter seems to work fine with anything but the Input Text fields :-(
>
> In my form I have something like that :
>
> <h:commandLink id="sendButton" action="#{contactForm.send}"
> title="#{session.messages.shortcuts_contactform_send}">
>     #{session.messages.shortcuts_contactform_send}
> </h:commandLink>
>
> In my web.xml I have this filter :
>
>  <filter>
>   <filter-name>localLanguageFilter</filter-name>
>   <filter-class>
>    ec.ep.eo.eoweb.filter.LocalLanguageFilter
>   </filter-class>
>  </filter>
>
>  <filter-mapping>
>   <filter-name>localLanguageFilter</filter-name>
>   <url-pattern>*.faces</url-pattern>
>  </filter-mapping>
>
> In my faces-config :
>
> <managed-bean>
>     <managed-bean-name>contactForm</managed-bean-name>
>     <managed-bean-class>ec.ep.eo.eoweb.presentation.bean.form.ContactForm</managed-bean-class>
>     <managed-bean-scope>session</managed-bean-scope>
>     <managed-property>
>         <property-name>services</property-name>
>         <value>#{EOWebServicesImpl}</value>
>     </managed-property>
> </managed-bean>
>
> <navigation-rule>
>     <from-view-id>*</from-view-id>
>     <navigation-case>
>         <from-outcome>go_contacts</from-outcome>
>         <to-view-id>/shortcuts/contacts.xhtml</to-view-id>
>         <redirect />
>     </navigation-case>
> </navigation-rule>
>
> In my ContactForm, I have a send() method that is never reched :-( :
>
> public
>
> synchronized String send() {
>     (some action to send an email....)
> }
>
> And finaly, here is my LocalLanguageFilter :
>
> public class LocalLanguageFilter implements Filter {
>
> ...
>
> public void
>
> doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
>
> HttpServletRequest request = (HttpServletRequest) servletRequest;
> HttpServletResponse response = (HttpServletResponse) servletResponse;
> String originalUri = request.getRequestURI().toLowerCase();
> String uri = originalUri;
> String contextPath = request.getContextPath().toLowerCase();
> if (uri.startsWith(contextPath)) {
>     uri = uri.substring(contextPath.length());
> }
> String[] parts = uri.split(Constants.PATTERN_SLASH);
> if (parts.length>0 && parts[1].length()==2) {
>     String languageCode=parts[1];
>     uri = uri.substring(3);
>     ILanguage language = getServices().findLanguageByBusinessKey(languageCode);
>     if (language==null) {
>         language=Constants.ENGLISH;
>     }
>     request.getSession().setAttribute(Constants.SYSTEM_LANGUAGE, language);
> }
>
> request.getRequestDispatcher(uri).forward(request, response);
>
> }
>
> ...
>
> }
>
> Thanks in advance for you help
>
> Marc
>
>
>
>
> Médiateur européen
>
> Marc Kamran Amir-Tahmasseb
>
> Unité Communication - Développeur web
>
> T. +33 (0)3 88 17 44 10
>
> marc.amir-tahmasseb@ombudsman.europa.eu
>
> 1 avenue du Président Robert Schuman
>
> CS 30403
>
> F - 67001 Strasbourg Cedex
>
> T. + 33 (0)3 88 17 23 13
>
> F. + 33 (0)3 88 17 90 62
>
> www.ombudsman.europa.eu
>
>
>
>
>
>


--
Jakob Korherr

blog: http://www.jakobk.com
twitter: http://twitter.com/jakobkorherr
work: http://www.irian.at