Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Проблемы с кодировкой STRUTS


Автор: Amaz0nka 16.1.2008, 19:50
Как можно изменить кодировку сабмита формы в стратсе?
При нажатии кнопки сабмит в форме стратса не сохраняются русские буквы, вместо них ?????? (форма добавления изменения читателя)
На англ всё работает хорошо, при чём если в форму отправляешь русские данные (например изменить существующего читателя) то вставляется всё туда хорошо, русские буквы отображаются, однако при нажатии submit сохраняет одни вопросики...
Что можно сделать чтобы submit отсылал responce в нужной кодировке
вот код самой формы:
Код

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@include file="taglib.jsp" %>

<html:html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=CP1251">
        <title>Add Reader</title>
    </head>
    <body>
    <H4>Readers -->> Add reader</H4>
    &nbsp
    &nbsp
    <html:form action="readers.do?method=save">
        <table border="0"  align="center" width="40%">
         <tr>
             <td width="40%">
                 <b>SURNAME:</b>
             </td>
             <td>
                 <html:text property="readers.surName" />
                </td>                    
            </tr>
            <tr>
             <td width="30%">
                 <b>NAME:</b>
             </td>
             <td>
                 <html:text property="readers.name"/>
                </td>                    
            </tr>
            <tr>
             <td width="30%">
                 <b>MIDDLE NAME:</b>
             </td>
             <td>
                 <html:text property="readers.middleName"/>
                </td>                    
            </tr>
            <tr>
             <td width="30%">
                 <b>DATE OF BIRTH:</b>
             </td>
             <td>
                 <html:text property="readers.dateOfBirthDisplay" />
                </td>                    
            </tr>
                    
        </table>
        &nbsp
        &nbsp
        <table border="0" align="center" width="20%">
            <tr>
                <td ><html:submit value="  SAVE  "></html:submit></td>
            </tr>
        </table>
        </html:form>
    </body>
</html:html>

Автор: v2v 17.1.2008, 00:12
мало данных.
попробуй поискать ответ http://www.relib.com/forums/Topic880866-5-1.aspx

Автор: Samotnik 17.1.2008, 00:41
Amaz0nka,  если проблема с кодировкой,  используйте   POST    запрос!   

Автор: Amaz0nka 17.1.2008, 01:04
v2v, у меня ссылка не работает :(

Samotnik, я его и использую...

Проблема в том что при вводе в поля формы русских символов выкидывает ексепшен... если вводить англ символы, то всё в порядке.
Но когда я ввожу туда русские символы, их передаёт как ??????????? или что-то в этом духе... а дальше когда кидаю эти данные в базу, поннятно почему, вываливается эксепшен 
Код


16.01.2008 23:56:36 org.apache.struts.action.RequestProcessor processException
WARNING: Unhandled Exception thrown: class java.sql.SQLException
16.01.2008 23:56:36 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet action threw exception
java.sql.SQLException: Incorrect string value: '\xC3\x90\xC2\xBD\xC3\x91...' for column 'surname' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2941)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3249)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1268)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1541)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1455)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1440)
    at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:101)
    at epam.project.manager.ReadersManager.add(ReadersManager.java:75)
    at epam.project.action.ReadersAction.save(ReadersAction.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
    at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:731)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)



Автор: v2v 17.1.2008, 01:49
ты данные из формы в какую то базу пишешь?
попробуй тогда эту ссылку: http://jiploo.com/blog/struts-utf-8-and-form-submissions/

Добавлено через 2 минуты и 57 секунд
в первой данной ссылке обсуждался такой же вопрос, и было предложено 2 решения:
1. использовать фильтры -> http://jiploo.com/blog/struts-utf-8-and-form-submissions/ 
2. 
Цитата

Просто перегрузил класс ActionServlet. Тогда всё заработало. Незнаю как в версии 1.2.7 у Struts но параметр контролера contentType выставляется только у Response.

Код

public class ActionServlet extends org.apache.struts.action.ActionServlet {
    public void doGet(javax.servlet.http.HttpServletRequest request,
            javax.servlet.http.HttpServletResponse response)
     throws java.io.IOException,
            javax.servlet.ServletException {
        request.setCharacterEncoding("UTF-8");
        super.doGet(request, response);
    }
    public void doPost(javax.servlet.http.HttpServletRequest request,
            javax.servlet.http.HttpServletResponse response)
     throws java.io.IOException,
            javax.servlet.ServletException {
        request.setCharacterEncoding("UTF-8");        
        super.doPost(request, response);
    }
}

Автор: Samotnik 17.1.2008, 02:52
Amaz0nka,  В данный момент занимаюсь тем же самым,  завтра буду на офисе, выложу, то что у меня  получается! 

Автор: Amaz0nka 17.1.2008, 16:02
Завтра будет поздно, мне сегодня нужно ((((( завтра уже сдавать ((((

v2v, тут база не причём, я в классе экшена (перед тем как отправляю в базу) вывожу на консоль то что в форме ввела и уже там отображается ????

Автор: v2v 17.1.2008, 16:12
прочитала, попробовала то что я выше написал?

Автор: Amaz0nka 17.1.2008, 16:14
Уррраааааааа!!!!!!!!! Спасибо ребята, очень выручили!!!! помогло вот это http://ianpurton.com/struts-utf-8-and-form-submissions/

ещё раз ОГРОМНОЕ спасибо!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)