0

我在 . 的帮助下将 queryString 中的值设置为 managedBean 的属性<f:viewParam>。如果我打印属性的值,它对于普通字符正常工作。但是,当 queryString 包含重音字符时,在将值设置为 managedBean 的属性后,如果我打印该属性的值,重音字符将无法正确显示。

.xhtml 代码片段如下:

<f:metadata>
<f:viewParam id="requestString" name="requestString" value="#{aproveOrDenyController.requestString}" />
</f:metadata>

托管豆:

@ManagedBean(name = "aproveOrDenyController")
@ViewScoped
public class AproveOrDenyController extends BaseWebController implements Serializable 
{
private String requestString;


public final String getRequestString() {
    return requestString;
}
public final void setRequestString(String requestString) {
    this.requestString = requestString;
    System.out.println(this.requestString);
}
}

如果查询字符串包含...&requestString=abcdefgh&..... 那么它会abcdefgh正确打印。但是如果查询字符串包含 ...&requestString=SociétéGéniale&.. 那么它会打印SociétéGéniale. 但我想要SociétéGéniale。任何指针都会对我很有帮助。

Edit-1 生成的错误:

19:52:49,594 ERROR [org.jboss.as.server] JBAS015956: Caught exception during boot: org.jboss.as.controller.persistence.ConfigurationPersistenceException: JBAS014676: Failed to parse configuration
at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:141) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.server.ServerService.boot(ServerService.java:266) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:155) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_10]
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[8,5]
Message: JBAS014789: Unexpected element '{urn:jboss:domain:1.2}extensions' encountered
at org.jboss.as.controller.parsing.ParseUtils.unexpectedElement(ParseUtils.java:85) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.server.parsing.StandaloneXml.readServerElement_1_1(StandaloneXml.java:351) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:127) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:100) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:110) [staxmapper-1.1.0.Final.jar:1.1.0.Final]
at org.jboss.staxmapper.XMLMapperImpl.parseDocument(XMLMapperImpl.java:69) [staxmapper-1.1.0.Final.jar:1.1.0.Final]
at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:133) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
... 3 more
4

2 回答 2

2

URI 查询字符串的解码由 servlet 容器(Tomcat、JBoss、Glassfish 等)管理。这通常默认为 ISO-8859-1。您需要将 servletcontainer 中的查询字符串解码字符集配置为与 JSF/Facelets 用于对响应和 POST 请求进行编码的字符集相同,默认为 UTF-8。在您的情况下,查询字符串编码显然使用默认的 ISO-8859-1。该é字符存在于两个字节的UTF-8 编码0xC3中,0xA9每个字节又以ISO-8859-1 编码的字符表示,Ã并且©,正是您所看到的字符。这证实了错误地使用了 ISO-8859-1 而不是 UTF-8。

当您使用 JBoss AS 时,您需要在<server>JBoss' 的/standalone/configuration/standalone.xml中间<extensions>和中间添加以下条目<management>

<system-properties>
    <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true" />
</system-properties>

这将指示 JBoss 用于ServletRequest#getCharacterEncoding()解码查询字符串,而不是 ISO-8859-1 的默认编码。如果这仍然不起作用(当您使用 PrimeFaces 时可能会发生这种情况),那么除了上述配置条目之外,您还需要使用 servlet 过滤器将字符编码显式设置为 UTF-8。这部分在通过 PrimeFaces 输入组件检索的 Unicode 输入的解决方案 1 中得到解答。

另一个可能的原因是最终的输出目的地System.out.println()没有使用 UTF-8 来呈现打印的字符。这又与 JSF 和 servletcontainer 完全无关。你也没有告诉任何关于System.out.println()运行的上下文,所以在这里也很难给出一个合适的答案。但是如果它是例如 Eclipse,那么您可以通过将Window > Preferences > General > Workspace > Text File Encoding设置为 UTF-8 来配置它。

也可以看看:

于 2013-07-16T11:40:44.297 回答
0

在集成到先前的答案中,您可以尝试添加:

<system-properties>
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
    <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true" />
</system-properties>

到standalone.xml 配置文件。

于 2013-07-16T23:42:29.653 回答