Problema di codifica dei caratteri servlet con JPA
-
26-12-2019 - |
Domanda
OK, ho speso Tre Sette ore Google e test e mi arrendo, devo chiedere aiuto. Ero usato per svilupparsi in Linux e tutto era facile, ora uso Windows e una cosa facile come impostare la posizione corretta locale non funziona.
Ho creato semplice JSP con modulo:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<form action="save-user" method="post">
Name: <input type="text" name="name"><br>
Email: <input type="text" name="email"><br>
<input type="submit" value="Save">
</form>
.
e servlet:
String name = request.getParameter("name");
String email = request.getParameter("email");
.
ricevo Leoå ¡invece di Leoš. Io uso Willfly 8.0RC1, Windows 8 Ceco, Firefox.
Cosa ho provato già:
- richiesta.setchAracterCodiing ("UTF-8"); prima di leggere prima Parametro
- filtro con richiesta.setcharacterencoding ("UTF-8");
- Proprietà JVM -DFile.encoding= UTF-8
- Rimuovi barattoli Standard Jee Stack da guerra
- Fix war packaging
- Progetto diviso al modulo Web ed EJB
Quando l'entità JPA / DAO è implementato, quindi il diacritico è manglato. Se commendo l'entità dal servlet e rimuovi l'entità JPA dalla guerra (attualmente rimuovi oauthloginejb.jar da web-inf / lib), ricevo una corretta codifica. Se aggiungo questo ejb indietro, allora fallisce. È un bug jboss / wildfly?
Posso fornire fonti complete: https:// drive. google.com/file/d/0b-adlc5kthqdwtdyoewxouptveu/edit?usp=sharing . È pronto a correre, non hai nemmeno bisogno di digitare lettere ceche, come sono precompilate. Grazie
Soluzione
Marko da Wildfly Dev Mailing List mi ha indicato questo difetto: https://issues.jboss.Org / Sfoglia / CDI-411 e questo workaround: http://weld.cdi-spec.org/documentation/#3
Quando ho modificato il mio web.xml, ha iniziato a lavorare:
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>cz.literak.demo.oauth.servlets.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CDI Conversation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
. Altri suggerimenti
È necessario chiamare request.setCharacterEncoding("UTF-8")
prima di leggere prima la richiesta di richiesta InputStream.I parametri possono essere letti dal filtro prima di impostare la codifica nel servlet.Può essere presente un filtro in OAuthLoginEJB.jar
o in un'altra dipendenza, che legge prima i parametri?In genere, questo è un parametro per il debug ... con Servlet API 3.0, servlet e filtri possono essere registrati da annotazioni, quindi alcuni filtro possono essere registrati nonostante il web.xml
vuoto.