首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GSP与Grails中的控制器

GSP与Grails中的控制器
EN

Stack Overflow用户
提问于 2012-01-19 01:59:57
回答 2查看 450关注 0票数 0

我有一些维护Grails应用程序的经验;现在创建一个“任务管理”应用程序作为练习。

显然,呈现视图的是Groovy服务器页控制器动作的视图二分法,如URLMappings.groovy示例中的这个片段所示:

代码语言:javascript
复制
static mappings = {

    // ..

    "/" (view:'/index')
    "/login/$action?" (controller: 'login')
    "/logout/$action?" (controller: 'logout')

    "500" (view:'/error')
}

其中,必须将面向用户的URL映射到视图(GSP)或呈现视图的控制器,例如:

代码语言:javascript
复制
class LoginController {

    /**
     * Show the login page. 
     */
    def auth = {

        // .. auth logic

        String view = 'auth'
        String postUrl = "${request.contextPath}${config.apf.filterProcessesUrl}"
        render view: view, model: [postUrl: postUrl, rememberMeParameter: config.rememberMe.parameter]
    }

}

从设计的角度来看,如何选择使用哪种方法?什么时候使用GSP /taglib创建视图,比如输出的典型服务器页面,以及何时将URL映射到通过委托GSP呈现的控制器?我能把这两种方法结合起来吗?我是不是把这里的选择简单化了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-19 03:05:04

另外,与您的问题相关的hvgotcodes代码说,您唯一想直接映射到GSP视图的时间是该视图实际上是“静态”的。

所谓静态,我的意思是它不依赖于数据库或任何真实的计算来呈现视图。它仍然可以是动态的,因为它依赖于标记库来处理公共元素,以及页面顶部的“欢迎用户”文本。

只要您想处理用户提供的输入、查找数据库信息、管理更复杂的URL或包括计算,就应该使用控制器。

最终目标是GSP只包含可视和布局信息,以及偶尔的静态文本块。但是,您应该始终避免将任何逻辑与GSP混为一谈,因为它会扰乱代码,以后总是会导致维护上的麻烦。

有关标记库的编辑:

正如我所写的:

标记库用于连接到视图的任何逻辑,例如遍历元素或切换某物的可见性。每当您试图将代码直接放入GSP中时,它可能应该放在标记库中。当然,一次性交易总是有例外的。

因此,如果视图中有逻辑代码,这与可视化或布局内容特别相关,则应该将其放在标记库中。一个很好的例子是Security中的<sec:ifLoggedIn>标记,它可以用于在用户登录时切换元素的可见性。这比像这样手动编写它要好得多:

代码语言:javascript
复制
<sec:ifLoggedIn>blah blah</sec:ifLoggedIn>
<g:if test="${session.user?.loggedIn}">blah blah</g:if>

因为它使目的更清晰(按其标题),以及抽象逻辑,所以如果以后需要改变某件事情的工作方式,您只需在一个地方更改它。

tl;dr:

  • GSPs -简化“静态”内容
  • 标记-可重用的动态组件,专门用于可视或布局内容
  • 控制器/GSP.动态内容
票数 3
EN

Stack Overflow用户

发布于 2012-01-19 02:23:39

我不认为这是二分法。GSPs和Controller操作(旨在)协同工作,控制器调用服务加载数据,准备将数据传递到适当的GSP。

url映射是为了如果您想要打破url的Grails约定,这是正交的加载数据和显示数据(应该)的工作方式。

唯一一次(IMHO)出现二分法是当开发人员在项目代码功能中出现不一致时;也就是说,当然有可能出现二分法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8920175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档