在Grails中使用HTML构建器而不是GSP

时间:2009-12-03 17:46:33

标签: java grails groovy gsp

有没有办法使用 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是为了给出这个想法而发明的。

3 个答案:

答案 0 :(得分:5)

在grails用户指南的web layer section下搜索构建器。这里有一个示例,向您展示如何使用xml构建器完成此操作。

答案 1 :(得分: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,并且可以从Grails访问SpringMVC的大部分功能。因此,如果您可以弄清楚如何修改视图文件,只需更改控制器操作以返回适当的ModelAndView实例,它应该如上所述工作。

答案 2 :(得分:0)

GSP允许您在&lt; %%&gt;内运行任意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标签,您可以将其他内容传递给它。

所以你要求的当然是可能的,虽然我不确定它是否会最终成为胜利。我建议您可以将TagLibs与模板和SiteMesh布局结合使用 - 这绝对可以极大地简化事情。