我正在Tomcat 7.0上使用SAP Commerce(Hybris)中的ORBEON 2018.2.3.201905172253 PE。当Hybris点击Orbeon应用程序创建一个新表单并获得中文的内联HTML时,我得到的是问号而不是中文字符。
URL:http://localhost:9001/orbeon/fr/yforms/myform/new?orbeon-embeddable=true
我发现Tomcat 7中有一个已知的汉字问题:
https://books.google.co.nz/books?id=kNVe8lzTec0C
显然,Orbeon包含了一种使用oxf将字符编码设置为UTF-8的方法。xforms。渲染器。web中的默认编码参数。xml文件:
https://doc.orbeon.com/xforms/filter
我已经在网上试过了。xml,并从Orbeon应用程序获得相同的结果。我甚至使用Postman执行了相同的请求,以检查是否与我的Hybris店面存在集成问题,但结果是相同的。
这是我web.xml的摘录:
<filter>
<filter-name>orbeon-xforms-filter</filter-name>
<filter-class>org.orbeon.oxf.servlet.OrbeonXFormsFilter</filter-class>
<!-- Uncomment this for the separate WAR deployment -->
<init-param>
<param-name>oxf.xforms.renderer.context</param-name>
<param-value>/orbeon</param-value>
</init-param>
<init-param>
<param-name>oxf.xforms.renderer.default-encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- End separate WAR deployment -->
</filter>
<filter-mapping>
<filter-name>orbeon-xforms-filter</filter-name>
<url-pattern>/xforms-jsp/*</url-pattern>
<!--Servlet 2.4 configuration allowing the filter to run upon forward in addition to request-->
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
将过滤器的url模式更改为“/orbeon/fr/yform/*”打破了整个局面,我甚至不能用英语渲染表单。
在Java调试请求时,我尝试将HttpRequest对象的字符编码设置为UTF-8。同样的结果。
我也试过这些没有好结果:
•在服务器中的元素上设置URIEncoding属性。xml到URIEncoding=“UTF-8”。
•在服务器中的元素上设置useBodyEncodingForURI属性。xml转换为true。
与此相关: Orbeon表单本地化使用当前站点的会话语言
该线程的答案解释了我是如何本地化表单的。
最奇怪的是,该URL的响应确实包含一些中文字符:下拉式语言选择器的标签。所有其他标签都是问号。太奇怪了!
我想知道如何修改Tomat配置或Orbeon应用程序配置来修复此行为。
谢谢
大卫
正如所料,问题与Orbeon无关。
在我的Spring控制器中,从数据库获取表单的方法用@ResponseBody注释。控制器返回的字符串处于包含正确汉字的完美状态,但响应对象随后被Spring转换器截获。
@RequestMapping(method = RequestMethod.GET, value = ...")
@ResponseBody
public String getFormDefinition(@PathVariable final String aaa, @PathVariable final String aaa,
@RequestParam(value = "document", required = false) final String aaa, final HttpServletResponse response)
throws ServletException, IOException, YFormServiceException
{
return "html content";
}
当有@ResponseBody注释时,响应由Spring的消息转换器处理。此处列出了默认转换器:https://www.baeldung.com/spring-httpmessageconverter-rest
其中一个转换器是神奇的StringHttpMessageConzer。如果您检查它的源代码,您可以看到它使用ISO-8859-1作为默认字符集。这些转换器处理的每个响应都将使用不支持中文字符的ISO-8859-1编码。
修复:
在我的web Spring配置文件中,我添加了:
<mvc:annotation-driven>
<mvc:message-converters register-defaults="false">
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg index="0" name="defaultCharset" value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
使用recster-defax="false",您对Spring说不要使用任何默认转换器,而是使用下面提供的列表。定义StringHttpMessageConzer时,我指定UTF-8(支持汉字)作为默认编码。
等瞧
如标题所示,如果“模型”不完整,我所要做的就是返回一个自定义错误集合。 虽然我在积极地“搜索/谷歌”,但我还没有找到解决问题的办法。 我可以使用“modelstate”,但是由于“定制”,我想手动这样做。 代码如下: null null 基于自定义属性查找不完整的属性 属性样本 所以忽略后面的两个片段,更多的是给出一个完整的流程概述。我完全理解有一些“开箱即用”的技术,但我确实喜欢创建自己的实现。
Orbeon Forms 提供了一套web表单的构建和部署方案, 实现了W3C XForms标准, 并提供一个免费的开源的社区版,以及商业版。 Orbeon Forms 已经在世界各地的多个行业中得到应用,包括政府,银行,医疗保健,电信,和教育。 Orbeon Forms 主要包括2部分: Form Builder 可在线设计表单 Form Runner form的运行环境,包括表单管理、数据
在上周之前,我使用Python的经验非常局限于我们网络上的大型数据库文件,突然间,我开始尝试从html表中提取信息。 经过大量阅读,我选择在Python2.7中使用lxml和xpath来检索相关数据。我使用以下代码检索了一个字段: 产生了以下清单: 我认识到CR/LF和制表符转义字符,我想知道如何避免它们?
我正在尝试使用ASP.NET Web API返回一个JSON文件(用于测试)。 在Fiddler中,它确实显示为Json类型,但当我在Chrome中调试并查看对象时,它显示为单独行数组(左)。正确的图像是当我在使用它时该对象应该看起来的样子。 有人能告诉我应该返回什么来实现正确格式的Json结果吗?
本文向大家介绍Java Web Service返回带有>和相关面试题,主要包含被问及Java Web Service返回带有>和时的应答技巧和注意事项,需要的朋友参考一下 框架正在按照您所说的去做。您的方法返回,表示生成的WSDL应该具有类型为的响应消息。众所周知,XML字符串必须将某些字符编码为字符实体引用(即“ ”变为“ ”,因此XML解析器将其视为字符串,而不是您期望的XML元素的开头)。如
iam使用服务器端的docusign包,允许我的客户签名并下载签名文件。在如何客户完成签名后,我试图存储文档,但pdf是空白的。我的账户在生产中。知道为什么吗?