0

レンダリングされたテンプレートを表示するために、fieldset や td などのタグを更新するボタンがあります。

   <td id="tdBtn"><g:submitToRemote name="showFieldSet" value="Edit" update="fieldSet" action="setPwdTxtVisible" onComplete="hideBtn(3)" /></td>

 <fieldset id="fieldSet">
<-- this will be the section where the template will be rendered upon btn click name="showFieldSet" -->

    </fieldset>

アクション:

def setPwdTxtVisible=
    {
        def employeeId= params.employeeId
        MySession session = MySession.getMySession(request, params.employeeId)
        session.profileInstance.isEditPwd = true
        render(template:"/layouts/passwordProfile")

    }

ボタンではなく def メソッド内で更新を行う方法はありますか? 問題は、データの保存時に検証が失敗し、ページがリロードされ、更新された td が再びレンダリングされたテンプレートに戻らないことです。テンプレートが引き続き存在するように、catch 内の td を (SAVE メソッドの try catch ステートメントで) 更新したいと考えています。このようにコーディングするのが好きです:そして、javascriptを使用せずに最初の場所でtdにアクセスするにはどうすればよいですか? これは可能ですか?

 def setPwdTxtVisible=
    {
        def employeeId= params.employeeId
        MySession session = MySession.getMySession(request, params.employeeId)
        session.profileInstance.isEditPwd = true
        render(template:"/layouts/passwordProfile")
        update fieldset //<<------

    }
4

1 に答える 1

0

これは JavaScript がないとできません。コントローラーは DOM にアクセスできません。

コントローラーのアクションを変更して、失敗または成功のメッセージを返すようにします。その後、更新メソッドでマップを使用できます - update="[success: 'message', failure: 'error']"

これを行うと、基本的には、AJAX 呼び出しが失敗した場合、エラーと呼ばれる div のクライアント側でエラーがレンダリングされると言われます。

HTTP ステータス メッセージを介してエラー メッセージの流れを制御することもできるため、submitToRemote メソッドに on501="error" を追加して、エラー div を 501 の内容で更新するか、特定のサーバー アクションを使用することができます。

http://grails.org/doc/latest/ref/Tags/submitToRemote.html

コントローラーで DOM 要素を操作してはなりません。

于 2012-07-26T21:56:37.343 に答える