JSF请求范围表单编码为HTML实体

时间:2012-07-17 14:03:44

标签: jsf-2 primefaces crud

这与question about charset validation类似,不同之处在于提交后某些字符(例如“żźć”)显示为HTML实体(“żźć”)。奇怪的是像“&”这样的东西保存为“&”。

我已经在Tomcat端尝试过Spring的CharacterEncodingFilter和Connector,但这似乎没有任何帮助。数据库编码似乎不是问题,因为我的表单在与AJAX请求和会话bean一起使用时工作正常(与正常的提交和请求范围相反)。

以下是我表单的一部分:

<?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:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      >
  <h:body>
   <ui:composition template="/tpls/main-layout.xhtml">
   <ui:define name="content">
    <h:form>
    ...
     <p:commandButton value="#{i18n.msg('_Save')}"
      action="view" actionListener="#{readerController.save}" ajax="false" />
    ...
     <p:panelGrid>
      <p:row>
       <p:column><h:outputLabel for="lastName" value="#{i18n.msg('Reader.lastName')}" /></p:column>
       <p:column><p:inputText id="lastName" value="#{readerController.currentReader.lastName}" required="true">
        <p:ajax update="msg-lastName" event="change" />
        <f:validateRegex pattern="#{applicationConfiguration.nameValidationPattern}" />
        <f:validateLength maximum="50" />
       </p:inputText></p:column>
       <p:column><p:message for="lastName" id="msg-lastName" /></p:column>
      </p:row>
      ...
     </p:panelGrid>
    </h:form>
  </ui:define>
  </ui:composition>
</h:body>
</html>

编辑:正如澄清一样 - 您可以将#{i18n.msg('_Save')}Save#{applicationConfiguration.nameValidationPattern}等内容替换为例如[^0-9]。 {{1}}。

1 个答案:

答案 0 :(得分:0)

完全神奇。

我用它来转到我的编辑视图:

<p:commandButton action="#{readerController.edit(list.id)}" title="#{i18n.msg('_Edit')}" icon="ui-icon-gear" />

这是提交:

<p:commandButton ajax="false" value="#{i18n.msg('_Save')}" action="view" actionListener="#{readerController.save}" />

编码无效。

使用它来编辑视图:

<p:commandButton ajax="false" action="#{readerController.edit(list.id)}" title="#{i18n.msg('_Edit')}" icon="ui-icon-gear" />

同样提交和编码工作正常......更确切地说,使用ajax =“false”或两端的ajax =“true”工作。

去图。

修改:实际上是来自Corrupted characters redisplayed in inputs after submitting form的上述 CharacterEncodingFilter。