2013-07-13 22 views
5

Tôi có cùng sự cố với số Set request character encoding of JSF input submitted values to UTF-8 in GlassFish, giá trị đã gửi đến là Mojibake. Tuy nhiên, câu trả lời là mục tiêu của GlassFish và tôi đang sử dụng JBoss AS 7.Đặt mã hóa ký tự yêu cầu của đầu vào JSF đã gửi giá trị cho UTF-8

Tôi đã chỉ định URL kết nối JDBC sử dụng UTF-8:

jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8 

Và trong đầu trang JSF của tôi :

<?xml version='1.0' encoding='UTF-8' ?> 

Làm cách nào để giải quyết vấn đề tương tự trong JBoss AS 7? Hoặc tốt hơn, theo cách tổng quát hơn để nó hoạt động trong tất cả các máy chủ?

+0

Nó là không thể hiểu được vấn đề của bạn là gì. Vui lòng chỉnh sửa câu hỏi của bạn để làm rõ vấn đề bạn gặp phải. – skuntsel

+0

Sự cố của tôi giống với liên kết này [http://stackoverflow.com/questions/9682476/character-encoding-jsf-input]. Tôi đang sử dụng Jboss 7 AS thay vì Glassfish. Tôi muốn hỏi làm thế nào để khắc phục vấn đề trong Jboss. –

Trả lời

10

Câu hỏi mà bạn đã liên kết đến đã loại trừ mã hóa DB khỏi nguyên nhân do sự cố đã xảy ra trong quá trình in/hiển thị lại giá trị đã gửi trước khi lưu trong DB. Vì vậy, vấn đề là trong mã hóa yêu cầu HTTP.

URL kết nối JDBC của bạn với charset quy định,

jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8 

chỉ nói với người lái xe MySQL JDBC sử dụng UTF-8 để giải mã các giá trị trong các truy vấn SQL trước khi gửi nó vào DB. Điều này không chỉ hoàn toàn nằm ngoài phạm vi của JSF, nhưng đây cũng không phải là nguyên nhân của vấn đề của bạn, miễn là bạn hoàn toàn lạc quan rằng bạn cũng gặp vấn đề tương tự như trong câu hỏi được liên kết.

prolog XML của bạn với charset quy định,

<?xml version='1.0' encoding='UTF-8' ?> 

chỉ nói với các phân tích cú pháp XML để sử dụng UTF-8 để giải mã các nguồn XML trước khi xây dựng cây XML xung quanh nó. Trình phân tích cú pháp XML thực sự được sử dụng là SAX được sử dụng trong nội bộ bởi Facelets trong thời gian xây dựng khung nhìn JSF. Phần này hoàn toàn không liên quan gì đến mã hóa yêu cầu/đáp ứng HTTP và do đó rất khó có thể gây ra vấn đề của bạn.

Không ai trong số họ đặt mã hóa yêu cầu HTTP, trong khi bạn cần đặt mã hóa yêu cầu HTTP. Câu hỏi mà bạn đã liên kết đã cho thấy cách thực hiện điều đó cho máy chủ Glassfish. Trong trường hợp của bạn, bạn đang sử dụng JBoss AS server. Các thiết lập cụ thể Glassfish sau đó là không thể áp dụng và JBoss không hỗ trợ bất cứ điều gì như thế. Bạn sẽ cần phải mang theo một bộ lọc servlet tùy chỉnh để thực hiện công việc. Ví dụ.

@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); 
    } 

    // ... 
} 
+1

Khi tôi đang cố gắng sử dụng: jdbc: mysql: // localhost: 3306/mydb? UseUnicode = yes & characterEncoding = UTF-8 trong application-context.xml của tôi, nó cho tôi một lỗi Tham chiếu đến thực thể "characterEncoding" phải kết thúc bằng các ';' delimiter, u có thể giúp tôi với vấn đề – Nitin

+4

Incredible. Ở đây chúng tôi đang trong năm 2014, sử dụng hệ điều hành mới nhất, JEE, máy chủ ứng dụng, cơ sở dữ liệu - tất cả UTF-8. Và chúng tôi vẫn cần một số giải pháp để có các ký tự đặc biệt được xử lý chính xác. Cảm ơn giải pháp này! –

1

Thêm này để JBOSS_HOME/standalone/configuration/standalone.xml giải quyết nó cho tôi:

<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> 

Got nó từ https://developer.jboss.org/message/643825#643825

Các vấn đề liên quan