0

私は「モノ」ドメイン クラスを持っています。各モノには、ユーザーがモノにアクセスするために使用するレコード番号 (自動的に生成された ID ではありません) があります。

class Thing {
  ...
  String recordNumber
  ...
}

そのレコード番号を知って、モノを探すためのフォームがあります:

<g:form action="search">
    <input name="recordNumber">
    <g:submitButton name="btn" value="go to this Thing"/>
</g:form>

この形式で検証プロセスを使用したいと思います。recordNumber が見つからない場合 ( Thing.findByRecordNumber(recordNumber) == null)、入力フィールドが赤くなり、ツールチップに「レコード番号が見つかりません」というエラー メッセージが表示される必要があります。

私が知っている/読んだ限り(私はgrailsの新人です)、これはThingクラスの制約として書かれなければなりません:

static constraints = {
    recordNumber validator: { n -> Thing.findByRecordNumber(recordNumber) }
}

問題は、このフォームには入力するすべての「モノ」プロパティがなく、recordNumber 1 だけなので、呼び出すことができないことです。

new Thing(params).validate()

オブジェクト全体ではなく、1 つのフィールドだけで検証を呼び出す方法は?

4

2 に答える 2

3

これがあなたの主な質問であれば、私はそこに他の人を見ています:

「オブジェクト全体ではなく、1 つのフィールドだけで検証を呼び出す方法は?」

検証する値のリストを渡すことができ、それらのプロパティのみを検証します

new Thing(params).validate(["recordNumber"])

http://grails.org/doc/latest/ref/Domain%20Classes/validate.html

于 2013-05-22T10:41:41.537 に答える
0

検証は、ドメイン クラス プロパティの制約に対するものです。コントローラーにアクションが必要です。

def search = {
    if(params.recordNumber && Thing.findByRecordNumber(params.recordNumber)){
       redirect(action: "show", params:[id:Thing.findByRecordNumber(params.recordNumber).id])
    }else{
       flush.message = "No record found"
       render(view:'VIEW_WITH_SEARCH_FORM')
    }
}

ページを更新せずに検証したい場合は、javascript コードを記述します。

于 2013-05-22T10:00:36.080 に答える