Grails 2.2.4でwithFormを使用しようとしています 既存のgspファイルのフォームにuseToken = 'true'を追加しました。withFormがGrailsを使用してモデルデータをgspに渡さない2.2.4
しかし、関連するコントローラメソッドをwithForm {...} .invalidToken {response.status = 405}でラップすると、モデルからの属性が1つも受信されないためにgsp生成が失敗するため、内部サーバーエラーが発生します。
これを表示するために、実際のレンダーコードを、渡されたモデル属性の値を出力する簡単なステートメントに置き換えました。
私はwithFormラッパーを使用しないと、すべて正常に動作します。しかし、withFormがコンテンツをラップするとすぐに、モデル情報はもはや届きません。
私が間違っていることは何ですか?モデルをwithForm構文の下に置く必要がありますか?
コントローラコード:
def browse() {
// withForm {
def filter = null
def challenges = []
def oimlChallenges = []
def breadCrumbs
def total
def model = SystemUtil.baseModel(request)
def Boolean enablePartnerChallenge
def currentUser = springSecurityService?.currentUser
def source = params.source ?: 'innocentive'
model += [enablePartnerChallenge: enablePartnerChallenge, max: params.max ?: 10,]
filter = ChallengeFilter.build(params, sswcEnabled())
model += [challenges: challenges,
filter: filter, total: total, sort: 'postedDate',
currentOffset: params.offset, source: source,
searchTerm: params.searchTerm,
userFilter: userFilter()]
render(view: 'browse', model: model)
// }.invalidToken{ response.status = 405}
}
GSPコード:
<body>
<g:render template="/panels/headerUX"
model="[selectedMenu: 'Challenge Center']" />
<div class="body-container">
<div class="container">
<g:form name='filterForm' action="browse" id='filterForm'
method="post" useToken="true">
browse.gsp values:
${source.toString()}
${pavilionId.toString()}
${enablePartnerChallenge}
${challengeListing.toString()}
${pavilionTitle}
<%-- <g:render template='browseTabsRefresh' model="${[source: source, pavilionId: pavilionId, enablePartnerChallenge: enablePartnerChallenge, challengeListing: challengeListing, pavilionTitle: pavilionTitle]}" />--%>
<%-- <g:render template="newFilterPanel" model="${model}" />--%>
<%-- <div id="challengeListDiv">--%>
<%-- <g:render template='challengeListRefresh'--%>
<%-- model="${[challenges:challenges, filter:filter, userFilter: userFilter, challengeListing:challengeListing]}" />--%>
<%-- </div>--%>
</g:form>
</div>
</div>
<g:render template="/panels/footerUX" />
withForm無し印刷結果: browse.gsp値:innocentiveヌルヌルwithFormを用い
印刷結果: browse.gsp値:null null null
オリジナルに値 'innocentive'が含まれていて、現在はnullになっていることに注目してください。
はい、問題はフォームとメソッドの不一致でした。私は無作為に最初の更新を行うためのフォームを選んだ。残念ながら、私が選択したものは異常に動作し、メソッドはフォームデータの有無にかかわらず処理されます。それが働いたので、それは問題であると私には起こりませんでした。慣習に従った「標準」フォームを更新したとき、withFormは正常に動作しました。このような明確な説明をありがとう! –