3

Groovy ビルダーを使用して Grails アプリケーションで JSP ファイルを構築し、十分な統合を維持する方法はありますか?

よりわかりやすく説明すると、デフォルトでは、Grails は適切gspではあるが非常に冗長なファイルを使用します。

<div class="clear">
  <ul id="nav">  
    <li><g:link controller="snippets" action="list">Snippets</g:link></li>
    <li><g:link controller="users" action="list">Users</g:link></li>
    <li><g:link controller="problems" action="list">Problems</g:link></li>
    <li><g:link controller="messages" action="list">Messages</g:link></li>
  </div>
<div id="content">

groovy.xml.MarkupBuilder前のピースを次のように変える使い方はありますか

div(class:'clear') {
  ul(id:'nav') {
    li { g_link(controller:'snippets', action:'list', 'Snippets') }
// and so on

もちろんg_link、アイデアを与えるためだけに発明されています..

4

3 に答える 3

5

grails ユーザー ガイドのWeb レイヤー セクションでビルダーを検索します。そこには、xml ビルダーを使用してこれを行う方法を正確に示す例があります。

于 2009-12-03T20:46:53.037 に答える
1

完全な答えはありませんが、キーが「ビューリゾルバー」へのアクセスを取得していると思われます。通常の SpringMVC アプリでは、これらはviews.properties(またはviews.xml) で次のように構成されます。

csv=com.example.MyCSVResolver
xml=com.example.MyXMLResolver
audio=com.example.MySpeechResolver

通常の SpringMVC アプリではnew ModelAndView(myModel, 'csv')、コントローラー アクションのようなものを返します。

これにより、CSVResolverクラスが呼び出され、myModel のデータが渡されます。レンダリングされるデータを含むことに加えて、myModelいくつかの書式設定オプション (列幅など) も含まれる可能性があります。

Spring はビュー ファイルを検索して、ビュー名に一致するキーを探します。一致するものが見つからない場合、デフォルトでは、ビュー名を使用して JSP をレンダリングし、モデル データを渡します。

ここで Grails に戻ります....Grails は実際には SpringMVC 上の Groovy API であり、SpringMVC のほとんどの機能は Grails からアクセスできることを思い出してください。したがって、ビュー ファイルを変更する方法がわかれば、適切なModelAndViewインスタンスを返すようにコントローラー アクションを変更するだけで、上記のように動作するはずです。

于 2009-12-03T18:20:20.110 に答える
0

GSP では、<% %> ブラケット内で任意の Groovy コードを実行できます。したがって、次のようなものを持つことができます (BlackTiger によってリンクされたページから例を借ります):

<%      StringWriter w = new StringWriter()
        def builder = new groovy.xml.MarkupBuilder(w)
        builder.html{
            head{
                title 'Log in'
            }
            body{
                h1 'Hello'
                builder.form{ }   
            } 
        }     
    out << w.toString() 
%>

上記は g:form タグを呼び出しており、それに追加のものを渡すことができることに注意してください。

したがって、あなたが求めていることは確かに可能ですが、それが最終的に勝利になるかどうかはわかりません. Templates および SiteMesh Layouts と組み合わせて TagLibs を検討することをお勧めします。

于 2009-12-03T22:28:47.063 に答える