แกัปัญหา Cannot call sendRedirect() after the response has been committed

Posted on
development java

เจอ exception java.lang.IllegalStateException: Cannot call sendRedirect() after... ตัวนี้มานานแล้วมันมักจะเกิดขึ้นเวลาเราพยายามจะ redirect/ส่งต่อ request ไปยังหน้าอื่นๆ มันเกิดขึ้นเพราะเราไม่เข้าใจการทำงานของมันดีพอ ศึกษาจากโค้ดนี้

private void doPost() {
    if (someCondition) {
        sendRedirect();
    }
    forward(); // โค้ดตรงบล๊อกนี้ก็ยังคงถูกเรียกใช้งานอยู่ ถึงแม้ว่า if condition ข้างบนก็ถูกเรียกใช้งาน
}

เราจะคุ้นเคยกับการที่ว่า คิดว่าการเรียก sendRedirect() เหมือนกับการสั่ง System.exit() คือ program จบเลย แต่มันไม่ใช่อย่างนั้นน่ะสิ่

Error Cannot call sendRedirect() after the response has been committed จึงเกิดขึ้นเมื่อ forward() มันถูกเรียก เท่ากับว่าเราเรียก sendRedirect() แล้วยังไปเรียก forward() อีก exception มันจึงเกิดขึ้น

วิธีแก้โค้ดที่ง่ายๆ ก็คือ ใส่ return เข้าไป หน้าตาจะเป็นประมาณนี้

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

หรือจะใส่ else ก็ได้ให้มันเลือกเอาซักทาง

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

สรุปๆมาจาก stackoverflow