SORU
23 Ocak 2010, CUMARTESİ


java.lang.İllegalStateException: yanıt işlendi sonra ileri Olamaz

    int noOfRows = Integer.parseInt(request.getParameter("noOfRows"));
    String chkboxVal = "";
    // String FormatId=null;
    Vector vRow = new Vector();
    Vector vRow1 = new Vector();
    String GroupId = "";
    String GroupDesc = "";
    for (int i = 0; i < noOfRows; i  ) {
        if ((request.getParameter("chk_select"   i)) == null) {
            chkboxVal = "notticked";
        } else {
            chkboxVal = request.getParameter("chk_select"   i);
            if (chkboxVal.equals("ticked")) {
                fwdurl = "true";
                Statement st1 = con.createStatement();
                GroupId = request.getParameter("GroupId"   i);
                GroupDesc = request.getParameter("GroupDesc"   i);
                ResultSet rs1 = st1
                        .executeQuery("select FileId,Description from cs2k_Files "
                                  " where FileId like 'M%' and co_code = "
                                  ccode);
                ResultSetMetaData rsm = rs1.getMetaData();
                int cCount = rsm.getColumnCount();

                while (rs1.next()) {
                    Vector vCol1 = new Vector();
                    for (int j = 1; j <= cCount; j  ) {
                        vCol1.addElement(rs1.getObject(j));
                    }
                    vRow.addElement(vCol1);
                }
                rs1 = st1
                        .executeQuery("select FileId,NotAllowed from cs2kGroupSub "
                                  " where FileId like 'M%' and GroupId = '"
                                  GroupId   "'"   " and co_code = "   ccode);
                rsm = rs1.getMetaData();
                cCount = rsm.getColumnCount();

                while (rs1.next()) {
                    Vector vCol2 = new Vector();
                    for (int j = 1; j <= cCount; j  ) {
                        vCol2.addElement(rs1.getObject(j));
                    }
                    vRow1.addElement(vCol2);
                }

                // throw new Exception("test");

                break;
            }
        }
    }
    if (fwdurl.equals("true")) {
        // throw new Exception("test");
        // response.sendRedirect("cs2k_GroupCopiedUpdt.jsp") ;
        request.setAttribute("GroupId", GroupId);
        request.setAttribute("GroupDesc", GroupDesc);
        request.setAttribute("vRow", vRow);
        request.setAttribute("vRow1", vRow1);
        getServletConfig().getServletContext().getRequestDispatcher(
                "/GroupCopiedUpdt.jsp").forward(request, response);
    }

Bu işlev, yukarıda belirtilen hata atar ve sorun spot kuramıyorum. Herhangi bir yardım?

CEVAP
23 Ocak 2010, CUMARTESİ


Ortak bir yanlış anlaşılma arasında başlangıç olduğunu düşündüklerine göre arama forward() sendRedirect() ki sihirli bir şekilde çıkmak ve "atlama" yöntemiyle blok, burada göz ardı kalıntısı kodu. Örneğin:

protected void doPost() {
    if (someCondition) {
        sendRedirect();
    }
    forward(); // This is STILL invoked when someCondition is true!
}

Bu nedenle aslında doğru değil. Farklı başka bir Java yöntemleri (elbette System#exit() bekliyoruz) göre davranır onlar kesinlikle değil. Yukarıdaki örnek someCondition true, o zaman şans vardırbüyüközel durum alacak

java.lang.İllegalStateException: yanıt işlendi sonra ileri Olamaz

Bu if ifadesi sendRedirect() forward() bir çağrı olsun. if deyim forward() telefon ve daha sonra sendRedirect() sonra aşağıda arıyorsanız özel durum:

java.lang.İllegalStateException: yanıt işlendi sonra. () çağrısı sendRedirect

Bu sorunu gidermek için ya return; ifadesi sonradan eklemek gerekir

protected void doPost() {
    if (someCondition) {
        sendRedirect();
        return;
    }
    forward();
}

... ya da başka bir bloğu tanıtmak.

protected void doPost() {
    if (someCondition) {
        sendRedirect();
    } else {
        forward();
    }
}

Kod kök neden naildown için yöntem blok çıkmadan veya kod kalıntısı atlamadan sendRedirect() forward() telefon olan herhangi bir hat için sadece arama. Bu özel sunucu uygulaması daha önce çağrılmış olan herhangi bir sunucu veya filtre belirli kod satırından önce aynı sunucu uygulaması içinde, ama aynı zamanda olabilir.


Alakasızsomut sorun için, gerekli OLANLARI kodunuzu kaynakları sızdırıyor. Bu da Düzelt. İpuçları için, Ayrıca Bkz: 22**

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matt Harding

    Matt Harding

    23 Mayıs 2006
  • Randall P Studios

    Randall P St

    27 AĞUSTOS 2009
  • sk8ingis4me

    sk8ingis4me

    16 Mart 2006