2011-11-17 40 views
1

我正在嘗試關注Play!的documentation for validation。我有三個動作控制器:爲什麼我不玩!顯示驗證錯誤?

  1. 的add() - 「添加網站」的形式
  2. 加() - 當添加表單提交調用,進行實際的增加。
  3. edit() - 成功添加()調用導致編輯添加的網站(失敗的添加導致返回到add()表單)。

驗證失敗時,我按計劃重定向到add()操作。該#{ifErrors}模板工程(顯示<h1>Oops…</h1>)...但這裏有兩個問題:

  1. 網站URL參數不是「閃現」 - 在添加表單,它不會出現在相應的字段。
  2. 特定錯誤不會出現 - 此欄爲空:<span class="error">#{error 'website.url' /}</span>

我缺少什麼?

我的控制器:

public class Sites extends Controller { 
    private static final WebsiteRepository websiteRepo = new WebsiteRepository(); 

    public static void add() { 
     render(); 
    } 

    public static void added(@Valid Website website) { 
     if (Validation.hasErrors()) { 
      Validation.keep(); 
      params.flash(); 
      add(); 
     } 

     websiteRepo.save(website); 
     edit(website.id); 
    } 

    public static void edit(long websiteId) { 
     Website website = websiteRepo.getById(websiteId); 
     render(website); 
    } 

} 

add.html

<div id="addsite"> 

    <h1>Add a new site</h1> 

    #{ifErrors} 
    <h1>Oops…</h1> 
    #{/ifErrors} 

    #{form @added()} 

     #{if flash.error} 
      <p class="error"> 
       &{flash.error} 
      </p> 
     #{/if} 
     #{if flash.success} 
      <p class="success"> 
       &{flash.success} 
      </p> 
     #{/if} 


     <p id="url-field"> 
      <label for="url">URL</label> 
      <input type="text" name="website.url" id="url" class="url-field" value="${flash.url}" /> 
      <span class="error">#{error 'website.url' /}</span> 
     </p> 

     <p id="add-field"> 
      <input type="submit" id="add" value="Add" /> 
     </p> 
    #{/form} 
</div> 
+0

你能使用'#{errors}打印出錯誤

  • $ {error}
  • #{/ errors}'? –

    +0

    並使用@Required註釋了您的模型? –

    回答

    2

    值的格式是錯誤的,對複雜對象使用:

    ${flash['website.url']} 
    

    編輯:我克隆你的回購,你有以下錯誤:

    • 在模板中使用$ {閃存[ 'website.url']}
    • 您標記替換URL $ {閃存[website.url]}作爲@Required,但不是@URL;添加@URL註釋和錯誤將顯示
    • 要求所有者「不是一個有效的URL」,但沒有辦法提供一個,所以總是會有一個驗證錯誤,這
    +0

    讓感官......但是,當視圖呈現與您的建議,我得到「無法獲得空對象上的財產'網址'。」如果我嘗試實例化一個新的空白網站對象,並將它傳遞給add()方法的'render()'方法,我會得到一個不同的異常:https://play.lighthouseapp。COM /項目/ 57987播放框架/票/ 1262-NullPointerException異常,從渲染 – ripper234

    +0

    我建立了一個項目,你的代碼,它爲我工作。也許你在路線或模型中出了問題。請張貼這兩個以及。 –

    +0

    轉載。請複製此混帳回購協議:https://github.com/ripper234/PlayFramework-bug-report--1262-然後運行遊戲,並訪問http://本地主機:9000 /應用/加 – ripper234

    0

    而是調用add()嘗試的:

    render("Sites/add.html", website); 
    

    其中第一項就是路徑到添加模板和th e第二個你在POST調用中獲得的表單參數。

    的第一個參數也可以被引用爲「@add」(快捷方式)

    +0

    這似乎沒有改變任何東西。 – ripper234