为什么不是我的游戏!验证错误显示?

时间:2011-11-17 16:07:32

标签: java validation playframework

我正在尝试关注Play!的documentation for validation。我有一个控制器有3个动作:

  1. add() - “添加网站”表单
  2. added() - 在提交添加表单时调用,进行实际添加。
  3. edit() - 成功添加()调用会导致编辑添加的网站(添加的线索失败,返回add()表单)。
  4. 验证失败时,我会按计划重定向到add()操作。 #{ifErrors}模板有效(显示<h1>Oops…</h1>)...但有两个问题:

    1. 网站网址参数未“闪现” - 在添加表单中,它不会显示在相应的字段中。
    2. 未显示特定错误 - 此字段仍为空:<span class="error">#{error 'website.url' /}</span>
    3. 我错过了什么?

      我的控制器:

      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>
      

2 个答案:

答案 0 :(得分:2)

值格式错误,对于复杂对象使用:

${flash['website.url']}

编辑:我克隆了你的回购,你有以下错误:

  • 在您的模板中,将$ {flash [website.url]}替换为$ {flash ['website.url']}
  • 您将网址标记为@Required,但未标记为@URL;添加@URL注释,错误将显示“不是有效的URL”
  • 需要所有者,但无法提供所有者,因此此处始终存在验证错误

答案 1 :(得分:0)

而不是调用add()尝试:

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

其中第一个术语是添加模板的路径,第二个术语是POST调用中的表单参数。

第一个参数也可以称为“@add”(快捷方式)