我们在JSF应用程序中使用谷歌地图自动完成功能,但是当我们选择öä的名称时,backingBean会获得例如。 Ã作为价值。我们已将网站的元信息设置为utf-8,但在这种情况下这没有帮助。
我们这样添加:
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places&key=AIzaSyChQPYNPhodC79W6-oGzlVgQJEwfFMG_bs" />
<script type="text/javascript" charset="utf-8">
function addGMapAutoComplete(componentId) {
var component = document.getElementById('createRequest:' + componentId);
if (component) {
new google.maps.places.Autocomplete(component);
}
}
</script>
并用作
<p:inputText id="pickupLocation"
value="#{createRequest.pickupLocation}" required="true"
onfocus="addGMapAutoComplete('location')"
style="width:350px" />
任何人都可以帮助解决这个问题吗?
答案 0 :(得分:0)
这是PrimeFaces的一个已知问题。它错误地使用服务器的默认编码(通常是ISO-8859-1)来解码ajax请求的POST请求数据,即使JSF / Facelets本身已经默认使用UTF-8到所有层。
要解决此问题,您需要在请求处理中尽早调用值"UTF-8"
的{{3}}来手动将POST请求正文编码设置为UTF-8(参数之前)曾经解析过POST请求体)。最直接的方法是使用servlet过滤器:
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
// ...
}
或者,如果您恰好使用了JSF实用程序库ServletRequest#setCharacterEncoding()
,那么只需将以下条目添加到您的webapp web.xml
中即可使用其即用型OmniFaces:
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.omnifaces.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>