2017-03-02 8 views
2

を含むフォームを送信タペストリー5.3.8フィールドはゾーンによって更新されている玉葉私はフォームを持っている私のTMLでゾーン

簡体TML:フォームIを提出する際

<form t:id="editUserForm" t:zone="editRefresh" t:type="form"> 

        <label>Search For User to Edit: </label> 
        <input type="text" id="editUser" /> 

     <t:any 
       t:id="addNew" 
       element="button" 
       t:mixins="observe" 
       event="click" 
       zone="editRefresh" 
       fields ="['editUser']" > 
       Edit Selected User 
     </t:any>   

       <t:zone t:id="editRefresh"> 

       ...Fields here updated 

       <input t:type="submit" t:id="editUserButton" value="Edit User" /> 

      </t:zone> 
     </form> 

フィールドは、しかし、問題なく読み込まれます

Render queue error in SetupRender[app/Administration:editloginname]: Component app/Administration:editloginname must be enclosed by a Form component. 

ログを確認すると、バックエンドコードが実行された後、このエラーがスローされます。

また、送信時にページを更新する方法はありますか?フォームタグにt:ゾーンを指定して、t:任意のボタンを押したときにフォームがリフレッシュされないようにしました。ゾーンが更新されましたが、フォームが送信されたときにいつもどおり動作させたいと思います。

回避策は、私は、フォームがオンになっているページを注射し、

return adminPage; 

return editRefresh.getBody(); 

を変更し、これは回避策としてOK動作しますが、私は理想的な検討したいものではありません。

答えて

3

フォームを含まないフォームフィールドはレンダリングできません。これは、Tapestryはフィールドをレンダリングするときにフォームの隠れた入力に内部状態を保存し、フィールドをフォームとは別にレンダリングすると無効なフォーム状態になるためです。

は、利用可能なオプションについては、この答えを参照してください。提出のページをリフレッシュするようhttps://stackoverflow.com/a/27961175/2414933

:あなたはそれが完全に有効だとして、あなたの回避策を使用し続けることができます。ページを含むコンポーネントを結合したくない場合は、ページレベルでフォーム提出イベントを処理し、return this;Tapestry events are bubbledを覚えておいてください)を処理できます。

または、フォームコンポーネントからt:zone属性を削除します。 t:zoneフォームの提出がなければ、AJAXは使用されません。私が正しくあなたの問題を理解していれば、私は知りませんが、あなたがゾーンにフォームのいくつかの要素を取りたい場合は、あなたがそのように行うことができます

+1

ありがとうございました。 t:ゾーンに関する限り、私が削除すると、フィールドにデータを入力するt:任意のボタンをクリックすると画面が更新される別の問題が発生します。 –

関連する問題