Kyle Stiemann created MYFACES-4214:
--------------------------------------

             Summary: The wrong content type of "text/html" is set for Ajax 
requests
                 Key: MYFACES-4214
                 URL: https://issues.apache.org/jira/browse/MYFACES-4214
             Project: MyFaces Core
          Issue Type: Bug
          Components: General, Portlet_Support
    Affects Versions: 2.3.0, 2.2.12
            Reporter: Kyle Stiemann


h2. Steps to reproduce:

# Clone the 
[wrong-content-type-ajax-excecute-all-reproducer|https://github.com/stiemannkj1/wrong-content-type-ajax-excecute-all-reproducer]
 project:
{code}
 git clone 
https://github.com/stiemannkj1/wrong-content-type-ajax-excecute-all-reproducer.git
{code}
# Build the project:
{code}
 cd wrong-content-type-ajax-excecute-all-reproducer && mvn clean package -P 
myfaces
{code}
# Deploy the project to Tomcat:
{code}
 cp target/*.war 
$TOMCAT_HOME/webapps/wrong-content-type-ajax-excecute-all-reproducer.war
{code}
# Navigate to the deployed webapp at 
[http://localhost:8080/wrong-content-type-ajax-excecute-all-reproducer/|http://localhost:8080/wrong-content-type-ajax-excecute-all-reproducer/].
# Note that the _External Context Calls:_ show that 
\{{setResponseContentType("text/html")}} was correctly called before the first 
call to \{{getResponseOutputWriter()}}.
# Click the _Execute (default) Ajax Request_ button.
# Note the _External Context Calls:_.
# Click the _Execute @all Ajax Request_ button.

If the bug still exists, the _External Context Calls:_ will show that 
\{{setResponseContentType("text/html")}} was *incorrectly* called before the 
first call to getResponseOutputWriter()` during Ajax requests.

If the bug is fixed, the _External Context Calls:_ will show that 
\{{setResponseContentType("text/xml")}} was called immediately before the first 
call to \{{getResponseOutputWriter()}}.

h2. Additional Information:

The Servlet 3.1 Specification states (in section _5.5 Internationalization_):
{quote}
The \{{setCharacterEncoding}}, \{{setContentType}}, and \{{setLocale}} methods 
can be called repeatedly to change the character encoding. Calls made after the 
servlet response’s \{{getWriter}} method has been called or after the response 
is committed have no effect on the character encoding.
{quote}

Therefore, before the first call to 
\{{externalContext.getResponseOutputWriter()}}, 
\{{externalContext.setResponseContentType()}} must be called with the correct 
content type.

Although this bug does not seem to break anything, that's likely because 
servlet implementations do not perfectly implement the requirements of the 
servlet spec. This does cause issues in Servlet and Portlet Containers (such as 
Liferay) that correctly implement the respective specs.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to