gpt4 book ai didi

jsf - PrimeFaces 3.3

filtering fails with UTF8

转载 作者:行者123 更新时间:2023-12-04 14:48:02 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Unicode input retrieved via PrimeFaces input components become corrupted

(1 个回答)


5年前关闭。




我有一个部署到 JBoss AS 7.1 的 PrimeFaces 3.3/JSF 应用程序。为了显示我的数据,我使用 p:数据表带有一些过滤头。这是代码(缩小来源后):

<p:outputPanel id="custDataTable">            
<p:dataTable var="item" value="#{customerController.items}" rowKey="#{item.id}"
selection="#{customerController.current}" selectionMode="single" id="customersTable">
<p:column headerText="Surname" sortBy="#{item.surname}" filterBy="#{item.surname}" id="surname">
#{item.surname}
</p:column>
<p:column headerText="Age" sortBy="#{item.age}" filterBy="#{item.age}" id="age" styleClass="age">
#{item.age}
</p:column>
<p:column headerText="&nbsp;">
<p:spacer width="20" height="0" />
<p:commandButton update=":custForm" ajax="false" action="#{customerController.prepareEdit}" value="edit">
<f:setPropertyActionListener value="#{item}" target="#{customerController.current}" />
</p:commandButton>
</p:column>
</p:dataTable>
</p:outputPanel>

PrimeFaces p:数据表对数字 Age 列进行过滤始终有效,但在 Surname 列上会出现奇怪的行为。当后台 bean 的 项目 实例变量在姓氏中包含带有 ASCII 数据的元素,然后过滤工作。但是当 UTF8 数据存在时,过滤只能部分起作用:

[1] 我可以在列标题字段中输入我的语言环境的 UTF8 字符,结果确实被过滤(这是有效的部分)。

[2] 后备 bean 的 当前实例变量始终为空。 IE。绑定(bind):
selection="#{customerController.current}"

似乎没有工作。我在 中添加了一些日志记录CustomerController::prepare编辑 方法和编辑时值设置为null p:命令按钮 被按下。因此,我无法编辑基于 surname 列过滤的实例(当存在 UTF8 数据时)。但是,当我在数字年龄列上过滤或根本不过滤时,可以编辑具有相同 UTF8 数据的相同实例。

为了解决这个问题,我尝试注册一个字符编码过滤器:
public class CharacterEncodingFilter implements Filter {

@Override
public void doFilter(ServletRequest req,
ServletResponse resp,
FilterChain chain)
throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
chain.doFilter(req, resp);
}

并在我的 web.xml 中注册:
<?xml version="1.0" encoding="UTF-8"?>
<web-app ...
...
<filter>
<filter-name>Character Encoding Filter</filter-name>
<filter-class>mp.util.CharacterEncodingFilter</filter-class>
</filter>
</web-app>

但这也没有奏效。

最佳答案

您需要确保将请求字符编码设置为 UTF-8。您可以使用 servlet filter它被映射到覆盖感兴趣请求的 URL 模式上。例如。 /*或者只是在 FacesServlet 的 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);
}

// ...
}

也可以看看:
  • Unicode input retrieved via PrimeFaces input components become corrupted
  • 关于jsf - PrimeFaces 3.3 <p :datatable> filtering fails with UTF8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11487113/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com