フォームのカプセル化を説明するための回答を編集しました。通常、フォーム入力の段階的なプロセスや、他の場所に配置する必要があるより複雑な反復されたオブジェクトから構成されます。あなたが必要とするのは、さまざまな情報を取得するための一歩です。それを手動で処理し、別のクラスにまとめてダンプしてから、jquery-ui tabs
を探してください。タブの動的機能、つまり<li><a href="someurl">click</li>
を使用してコンテンツを特定のタブに動的に読み込むと、それは外側にある単一のフォーム、またはDOM
の中でより複雑な方が望ましい場合もあります。
私の編集の理由がそれ以上ではなかったとしても、多段フォームをキャプチャするのは少し複雑です。 だから、フォーム内に新しいgsp
または多分別のtotally different object
からbelongs
何かのさえiteration
に続いpassed those params
controller
に通じstep 1
sent 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/package
でvalidation bean
です:あなたは
MyDomain record = MyDomain.get(0L)
MyDmainBean bean = new MyDmainBean().formatObject(record)
bean.validate()
を今すぐ
implements Validateable
を呼び出すことができます
src/main/groovy/package
たぶん、あなたは、一時保存するために別のテーブルを必要としますデータ、一時データが検証されないデータ(「確認」が押されていない) – Nico