2016-12-07 7 views
0

私はこれが本当に複雑な形式です。すべてのフィールドを埋める必要がありますが、塗りつぶしのプロセスを保存して継続することができます。だから私は最終的に確認が押されると、すべてのデータが検証される必要があります。しかし、すでにデータベースに保存されているので、validate()は動作しません。私は仕事がまだprogremmのときに検証が必要ないので、save(validate:false)をdouingしてデータを保存します。Grailは既にデータベースに保存されているデータを検証します

既にデータベースに保存されているデータを検証するにはどうすればよいですか?私はそれを手動で行う必要がありますか?

+1

を今すぐimplements Validateable

class MyDmainBean { // must declare id def id // Then each object in your real domain class static constraints = { id (nullable:true,bindable:true) importFrom MyDomainClass//, exclude: ['field1'] //field 1 is not included but if field 1 was integer // in actual domain class and BigDecimal in bean //then exlude it since it won't bind } def formatObject(MyDomainClass domain) { id=domain.id .. } } 

を呼び出すことができますsrc/main/groovy/packageたぶん、あなたは、一時保存するために別のテーブルを必要としますデータ、一時データが検証されないデータ(「確認」が押されていない) – Nico

答えて

0

すでに保持されているオブジェクトを検証するとどうなりますか? 取得後、検証前に汚れて見えるようにする方法はありますか?

0

フォームのカプセル化を説明するための回答を編集しました。通常、フォーム入力の段階的なプロセスや、他の場所に配置する必要があるより複雑な反復されたオブジェクトから構成されます。あなたが必要とするのは、さまざまな情報を取得するための一歩です。それを手動で処理し、別のクラスにまとめてダンプしてから、jquery-ui tabsを探してください。タブの動的機能、つまり<li><a href="someurl">click</li>を使用してコンテンツを特定のタブに動的に読み込むと、それは外側にある単一のフォーム、またはDOMの中でより複雑な方が望ましい場合もあります。

私の編集の理由がそれ以上ではなかったとしても、多段フォームをキャプチャするのは少し複雑です。 だから、フォーム内に新しいgspまたは多分別のtotally different objectからbelongs何かのさえiterationに続いpassed those paramscontrollerに通じstep 1sent paramsことがありました。これは再びあるフォームがコントローラ

Class MyDomainController { 

    def doThis(MyBean bean) { 
     save(bean) 
    } 
} 

//に提出された場合、これは

import grails.validation.Validateable 
//important for some reason it needs entire collections 
// have had issues initialising it without .* 
import org.apache.commons.collections.* 
Class MyBean implements Validateable { 
    //this is capturing the current form fields 
    String username 

    //This is now collecting our form1 fields 
    List<MyDetailsBean> form1 = ListUtils.lazyList([], { new MyDetailsBean() } as Factory) 

    //if that had been 1 instance of it or like as mentioned passed from pervious form and called form2 
    MyDetailsBean form2 

    static constraints={ 
    username(nullable:false) //, validator: checkSomething) 
    } 
} 

グルーヴィー/メインのsrc /にある

<g:form action=myDomain" action="doThis"> 

<!-- this is some iteration that belongs to some other class outside of what i am actually trying to do: --> 
<g:each in="someObject" var="p"> 
<g:hiddenField name="form1.firstName" value="${p.firstName}"/> 
<!-- in this case hidden --> 
<g:hiddenField name="form1.surName" value="${p.surName}"/> 
</g:each> 

<!-- this is my actual form --> 
<g:textField name="username" /> 

</g:form> 

: 通常は、で終わるだろうsrc/main/groovyであり、オブジェクトの各反復を最初に収集するために使用された:

import grails.validation.Validateable 
Class MyDetailsBean implements Validateable { 
    String firstName 
    String surName 
} 

答えを更新しました。私は、Beanにオブジェクトをカプセル化することを提案していました。そのようなことをどうやって行うのかについての詳細はありませんでした。私は上記のことがはっきりしていると思いますそれはすべてオンザフライであるが、もしテストされれば、上で説明したようにすべて動作する。

次回更新後に追加するフォーム2の例です。最後に、あなたがそのクラスのルールは、現在検証プロセスの一部として適用することができる別のバリ​​デーションクラスにバインドされているので、あなたが

if (bean.validate() && bean.form2.validate()) { 
//all good 
} 

呼び出す両方のセットを検証します。


旧答え

簡単に言えば、それは地球上であなたが検証された入力を検証したいと思う理由デシベルである置きます。とにかく仕事が周り@Validateableまたは

Grailsの3であるGrailsの2 src/groovy/packagevalidation beanです:あなたは

MyDomain record = MyDomain.get(0L) 
MyDmainBean bean = new MyDmainBean().formatObject(record) 
bean.validate() 
+0

データベース内のデータは検証されません。確認が押されると、最初の検証が行われます。 –

+0

理論的には、今のところ構造がひどく設計されているだけで、検証されたデータのみをdbに渡す必要があります。データの整合性が保証されていることを保証します。検証のポイントはまさにこれです。すなわち、5のmaxLengthは、abcdefghを超えてdb例外をスローするabcdefghを与えられない。私はあなたが入力をキャプチャするために検証ビーン(複数可)に固執することをお勧めします。さまざまなフォームがそれを捕捉し、異なる検証ビーンが好きな場合はフォームをカプセル化することを意味します。最後に、テーブルごとに必要な入力がすべて必要な場合は格納してください。しかし、この作業は – Vahid

+0

の代わりにjqueryタブを参照し、何をしようとしているか、どのように動作するかを決めるために必要なさまざまなタブフォームを用意してください – Vahid

関連する問題