编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Grails指南30Web层网页布局及修饰

wxchong 2024-06-24 20:03:28 开源技术 11 ℃ 0 评论

网页布局及修饰复习与学习~

被装饰页面(子页面):

<html>

<head>

<meta name="layout" content="myLayout" />

<title>

子标题

<title>

<script src="myscript.js" />

</head>

<body onload="alert('你好');">

子页面

</body>

</html>

装饰布局(模板)://grails-app/views/layouts/myLayout.gsp

<html>

<head>

<script src="global.js" />

<title>

<g:layoutTitle default="模板标题"/>

</title>

<g:layoutHead />

</head>

<body onload="${pageProperty(name:'body.onload')}">

<div class="wrapper">

<g:layoutBody />

</div>

</body>

</html>

最终结果:

<html>

<head>

<script src="global.js" />

<title>

子标题

</title>

<script src="myscript.js" />

</head>

<body onload="alert('你好');">

<div class="wrapper">

子页面

</div>

</body>

</html>

##################

被装饰页面(子页面):

<html>

<head>

<meta name="layout" content="myLayout" />

<script src="myscript.js" />

</head>

<body onload="alert('你好');" class="lvchanglong" shensijun="深思君">

子页面

</body>

</html>

装饰布局(模板)://grails-app/views/layouts/myLayout.gsp

<html>

<head>

<script src="global.js" />

<title>

<g:layoutTitle default="模板标题"/>

</title>

<g:layoutHead />

</head>

<body onload="${pageProperty(name:'body.onload')}" class="${pageProperty(name:'body.class')}" shensijun="${pageProperty(name:"body.shensijun")}">

<div class="wrapper">

<g:layoutBody />

</div>

</body>

</html>

最终结果:

<html>

<head>

<script src="global.js" />

<title>

模板标题

</title>

<script src="myscript.js" />

</head>

<body onload="alert('你好');" class="lvchanglong" shensijun="深思君">

<div class="wrapper">

子页面

</div>

</body>

</html>

注:当页面没有指定标题时,将使用指定模板的默认标题。pageProperty中的name值是有着特殊写法的,请多加留意,还有英文字母要小写。

pageProperty中的name值一般以"body"或"page"开头,"."代表要引用什么什么,关于"page"关键字稍后进行说明。

######################

之前说到的是,页面的整体布局,总结一下:

针对模板页,由上到下,标题title可替换layoutTitle,head可追加layoutHead,body标签可更改pageProperty,页面内容可嵌入layoutBody

说完整体布局,现在再说说,局部的布局(常用layoutBody及pageProperty)~

局部模板:grails-app/views/layouts/container.gsp

<section>

<header>

<g:pageProperty name="page.title"/>

</header>

<section>

<g:layoutBody />

</section>

</section>

被装饰页面(子页面):

<html>

<head>

<title>Head标题</title>

</head>

<body>

<section class="major-part left-part">

<g:applyLayout name="container">

<content tag="title">

Page标题

</content>

随便什么东西

</g:applyLayout>

</section>

</body>

</html>

最终结果:

<html>

<head>

<title>Head标题</title>

</head>

<body>

<section class="major-part left-part">

<section>

<header>

Page标题

</header>

<section>

随便什么东西

</section>

</section>

</body>

</html>

###################

局部模板:grails-app/views/layouts/myLayout.gsp

<ul>

<li>

<g:pageProperty name="page.fullname" default="姓名"/>

</li>

<li>

<g:pageProperty name="page.nickname" default="昵称"/>

</li>

<li>

<g:layoutBody/>

</li>

</ul>

被装饰页面(子页面):

<html>

<head>

<title>Head标题</title>

</head>

<body>

<section class="major-part left-part">

<g:applyLayout name="myLayout">

随便什么东西

</g:applyLayout>

</section>

</body>

</html>

最终结果:

<html>

<head>

<title>Head标题</title>

</head>

<body>

<section class="major-part left-part">

<ul>

<li>

姓名

</li>

<li>

昵称

</li>

<li>

随便什么东西

</li>

</ul>

</section>

</body>

</html>

###################

局部模板:grails-app/views/layouts/myLayout.gsp

<ul>

<li>

<g:pageProperty name="page.fullname" default="姓名"/>

</li>

<li>

<g:pageProperty name="page.nickname" default="昵称"/>

</li>

<li>

<g:layoutBody/>

</li>

</ul>

被装饰页面(子页面):

<html>

<head>

<title>Head标题</title>

</head>

<body>

<section class="major-part left-part">

<g:applyLayout name="myLayout">

<content tag="fullname">

吕常龙

</content>

随便什么东西

<content tag="nickname">

深思君

</content>

</g:applyLayout>

</section>

</body>

</html>

最终结果:

<html>

<head>

<title>Head标题</title>

</head>

<body>

<section class="major-part left-part">

<ul>

<li>

吕常龙

</li>

<li>

深思君

</li>

<li>

随便什么东西

</li>

</ul>

</section>

</body>

</html>

###################

applyLayout有3中写法,各种写法间彼此独立,不可混用。三种写法的区别在于获取html内容的方式不同,一种是自己去定制html内容,一种是从url中获取html内容,最后一种是通过模板(如举例中的_userTemplate.gsp)获取html内容。

<g:applyLayout name="myLayout">

<h1>随便什么东西</h1>

</g:applyLayout>

<g:applyLayout name="myLayout" url="http://www.baidu.com" />

<g:applyLayout name="myLayout" template="userTemplate" model="[users:User.list()]" />

####################

页面包含举例:

<g:include controller="book" action="list" />

def content = include(controller:"book", action:"list")

####################

总结:applyLayout标签,即应用布局模板,目的是在已有布局中放置相应内容。include标签,即页面嵌入,嵌入指定页面到include标签所在位置(智能页面处理)。

局部模板:grails-app/views/layouts/myLayout.gsp

<ul>

<li>

<g:pageProperty name="page.fullname" default="姓名"/>

</li>

<li>

<g:pageProperty name="page.nickname" default="昵称"/>

</li>

<li>

<g:layoutBody/>

</li>

</ul>

被装饰页面(子页面):

<html>

<head>

<title>Head标题</title>

</head>

<body>

<section class="major-part left-part">

<g:applyLayout name="myLayout">

<content tag="fullname">

<g:include controller="user" action="fullname" />

</content>

<g:include controller="user" action="hello" />

</g:applyLayout>

</section>

</body>

</html>

控制器方法:

class UserController {

def fullname() {

[fullname:"吕常龙"]

}

def hello() {

[hello: "你好"]

}

}

fullname视图(grails-app/views/user/fullname.gsp):

<!DOCTYPE html>

<html>

<head>

<style>

.fullname {

color:blue;

}

</style>

</head>

<body>

<h1 class="fullname">${fullname}</h1>

</body>

</html>

hello视图(grails-app/views/user/hello.gsp):

<!DOCTYPE html>

<html>

<head>

<style>

.hello {

color:red;

}

</style>

</head>

<body>

<h1 class="hello">${hello}</h1>

</body>

</html>

最终结果:

<html>

<head>

<title>Head标题</title>

</head>

<body>

<section class="major-part left-part">

<ul>

<li>

<style>

.fullname {

color:blue;

}

</style>

<h1 class="fullname">吕常龙</h1>

</li>

<li>

昵称

</li>

<li>

<style>

.hello {

color:red;

}

</style>

<h1 class="hello">你好</h1>

</li>

</ul>

</section>

</body>

</html>

####################

网页布局本质:将页面布局与展示内容进行分离,使布局能够实现重用。

注意:

<g:applyLayout name="myLayout">

<content tag="fullname">

<g:include controller="user" action="fullname" />

</content>

<g:include controller="user" action="hello" />

</g:applyLayout>

属于applyLayout三种形态中的下面这种:

<g:applyLayout name="myLayout">

<h1>随便什么东西</h1>

</g:applyLayout>

其余两种形态,即便写成这种形式也没用,需要注意一下。但,如果实在想这么做,可以用以下方式试试:

<g:applyLayout name="myLayout">

<content tag="fullname">

<g:applyLayout name="" url="http://www.baidu.com" />

</content>

<g:include controller="user" action="hello" />

</g:applyLayout>

###############

最后的最后,布局的嵌套,例如:

<html>

<body>

<div id="header">

<g:applyLayout name="headerLayout">

<g:pageProperty name="page.header" />

</g:applyLayout>

</div>

<div id="nav">

<g:applyLayout name="navLayout">

<g:pageProperty name="page.navbar" />

</g:applyLayout>

</div>

<div id="body">

<g:applyLayout name="bodyLayout">

<g:pageProperty name="page.body" />

</g:applyLayout>

</div>

<div id="footer">

<g:applyLayout name="footerLayout">

<g:pageProperty name="page.footer" />

</g:applyLayout>

</div>

</body>

</html>

页面本身就是一个布局模板,在模板中应用别的布局,即布局的嵌套~

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表