2017-08-06 6 views
0

J'ai écrit un analyseur, qui peut analyser le texte Hiragana en texte Romaji. Puis j'ai fait une facelet que vous pouvez voir sur Picture1. Si j'entre un texte Hiragana et que je clique sur le bouton de traduction, il affiche du texte erroné dans les deux zones de texte. La bibliothèque de l'analyseur a des tests unitaires et tous les tests sont passés. J'ai également créé une petite interface graphique JavaFX en utilisant la même lib, et le bogue n'y est pas présent. Ce bogue ne se présente qu'après que je l'ai déployé et que je l'ai exécuté dans un navigateur. J'utilise JSF 2.2 et Glassfish 4.1.0 comme conteneur.Le champ de saisie JSF montre mojibake seulement à la première demande après le déploiement, alors cela fonctionne bien


Picture1: Image1 Quand je re-entrer dans le même texte après ces ordures a été montré, il fonctionne bien. Cela fonctionne comme prévu à tout autre moment. Vous pouvez le voir sur Picture2. J'entre le même texte et ça fonctionne bien après le bug initial.


Picture2: Image2


Voici le code du index.xhtml:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:f="http://java.sun.com/jsf/core"> 
    <h:head> 
     <title>Convert Hiragana, Romaji</title> 
    </h:head> 
    <h:body> 
     <h:outputStylesheet library="css" name="styles.css"/> 
     <f:view> 
      <div class="H_OuterDiv"> 
       <h1><h:outputText value="Hiragana to Romaji" /></h1> 
       <h:form> 
        <div class="H_HiraganaTextArea"> 
         <h3><h:outputText value="Enter Hiragana" /></h3> 
         <h:inputTextarea cols="30" rows="20" value="#  {hconverter.hiraganaInput}"></h:inputTextarea> 
        </div> 
        <div class="H_MiddleDiv"> 
         <div class="H_ButtonsDiv"> 
          <h:commandButton value="Translate" action="# {hconverter.convertHiraganaToRomaji()}"></h:commandButton> 
         </div> 
        </div> 
       </h:form> 
       <div class="H_RomajiTextArea"> 
        <h3> 
         Enter Romaji Text 
        </h3> 
        <h:inputTextarea value="#{hconverter.romajiOutput}"  cols="30" rows="20" /> 
       </div> 
      </div> 
    </f:view> 
    </h:body> 
</html> 

Et voici le code du bean géré. La classe HiraganaLettersNew est un singleton.

@RequestScoped 
@Named 
public class Hconverter { 
    private String hiraganaInput = null; 
    private String romajiOutput = null; 

    public String getHiraganaInput() { 
     return hiraganaInput; 
    } 

    public void setHiraganaInput(String hiraganaInput) { 
     this.hiraganaInput = hiraganaInput; 
    } 

    public String getRomajiOutput() { 
     return romajiOutput; 
    } 

    public void setRomajiOutput(String romajiOutput) { 
     this.romajiOutput = romajiOutput; 
    } 

    public void convertHiraganaToRomaji() { 
     HiraganaLettersNew parser = HiraganaLettersNew.getInstance(); 
     romajiOutput = parser.parseHiraganaString(hiraganaInput); 
    } 
} 

Quelqu'un pourrait-il s'il vous plaît me aider? Je suis nouveau sur les facelets et JavaEE, et je n'ai aucune idée de la raison de ce bug. Merci d'avance!

+0

double possible de [Caractère mauvais jeu pour le h JSF: inputText le soutient en premier lieu (seulement)] (https://stackoverflow.com/questions/ 9647380/incorrect-character-set-for-jsfs-hinputtext-on-first-submit-only) – Chase

Répondre

0

J'ai trouvé une solution.

Cette solution fonctionne avec glassfish. J'ai dû créer un fichier glassfish-web.xml dans cette structure. Prenez note que c'est un projet Maven.

{projectRoot}/src/main/webapp/WEB-INF/glassfish-web.xml 

Le fichier contient ce code:

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


<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD 
GlassFish Application Server 3.1 Servlet 3.0//EN" 
"http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app> 
    <locale-charset-info> 
     <parameter-encoding default-charset="UTF-8" /> 
    </locale-charset-info> 
</glassfish-web-app> 

Après une Déployez propre, le bogue est disparu. Cette question est un doublon, je ne le savais pas quand j'ai demandé.


Voir aussi: It has been asked here before.

BalusC's blog