0

我写了一个解析器,它可以将平假名文本解析为罗马字文本。然后我做了一个你可以在 Picture1 上看到的 facelet。如果我输入任何平假名文本并单击翻译按钮,它会在两个文本区域中显示垃圾文本。解析器库有单元测试,所有测试都通过。我还使用相同的库制作了一个小型 JavaFX GUI,并且该错误不存在。此错误仅在我部署它并在浏览器中运行后出现。我使用 JSF 2.2 和 Glassfish 4.1.0 作为容器。


图1: 图片1 当我在显示这个垃圾后重新输入相同的文本时,它运行良好。它在任何其他时间都可以正常工作。你可以在图片2上看到它。我输入了相同的文本,并且在最初的错误之后效果很好。


图2: 图片2


这是 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>

这是托管 bean 的代码。HiraganaLettersNew 类是一个单例。

@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);
    }
}

有人可以帮我吗?我是 facelets 和 JavaEE 的新手,我不知道为什么会发生这个错误。先感谢您!

4

1 回答 1

0

我找到了解决方案。

此解决方案适用于 glassfish。我必须在这个结构中创建一个文件 glassfish-web.xml。请注意,这是一个 Maven 项目。

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

该文件包含以下代码:

<?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>

干净部署后,错误消失了。这个问题是重复的,我问的时候不知道。


另请参阅: 之前已在此处询问过。

BalusC 的博客

于 2017-08-07T13:11:25.027 回答