7

Tôi không thể hiển thị lỗi từ đối tượng lệnh của mình. Nó thực hiện tốt công việc nhưng chế độ xem .gsp của tôi không hiển thị các lỗi mà tôi nâng cao.Lỗi xác thực lệnh hiển thị trên chuyển hướng

Đây là hành động điều khiển của tôi:

def handleModifyProfile2 = { CreditProviderModificationCommand cpmc -> // bind params to the command object 
    if (cpmc.hasErrors()) { 
     flash.message = "Error modifying your profile:" 
     redirect(action: "modifyProfile", params: [creditProvider : cpmc]) 
    } ... 

Sau đây là cách tôi cố gắng để làm cho những sai lầm trong quan điểm của tôi .gsp:

<g:hasErrors bean="${creditProvider}"> 
    <div class="errors"> 
     <g:renderErrors bean="${creditProvider}" as="list" /> 
    </div> 
</g:hasErrors> 

Làm thế nào tôi có thể nhận được các lỗi sẽ được hiển thị trong lượt xem?

Trả lời

9

Bạn không thể gửi lệnh qua chuyển hướng bằng cách sử dụng params. Bạn có một vài lựa chọn:

  • render() trong điều kiện lỗi thay vì redirect() ing:

    if(cpmc.hasErrors()) { 
        render(view: 'profile', model: [creditProvider: cpmc]) 
    } 
    

    Đây là thành ngữ phổ biến nhất cho những gì bạn đang làm.

  • Store lệnh trong phiên giao dịch để kéo dài nó qua chuyển hướng:

    if(cpmc.hasErrors()) { 
        session.cpmc = cpmc 
        redirect(...) 
    } 
    
    // and in your action 
    def cpmc = session.cpmc ?: null 
    render(view: 'profile', model: [creditProvider: cpmc]) 
    

    Tùy chọn này là hơi có vấn đề. Nếu không được thực hiện đúng, bạn có thể gây ô nhiễm phiên và để các đối tượng treo xung quanh, chiếm bộ nhớ. Tuy nhiên, nếu được thực hiện đúng cách, nó có thể là một cách phù hợp để thực hiện chuyển tiếp sau chuyển hướng.

+0

AH ah! Bạn đã kết thúc 3 giờ chuyển vùng. Cảm ơn bạn rất nhiều! –

+0

Chắc chắn, không sao cả. –

+1

Cảm ơn, tôi thấy câu trả lời của bạn cũng hữu ích. BTW, tôi giả sử sử dụng đèn flash thay vì phiên trực tiếp sẽ ngăn chặn tình trạng ô nhiễm phiên? –

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