AJAXJS-Web 模板内置语句

页面常见标签库

内容标签基于 JSP Tag Files 实现。相关教程请参阅《JSP Tag Files 技术总结》。使用前,请把源码目录下的 /tags_v2 通过 Eclipse 的 link file 关联到当前项目的 /WEB-INF/tags(也就是导入标签库的过程),这个 /WEB-INF/tags 位置不能修改;然后重命名 tags_v2 为 public(推荐 public,可修改),于是,引用头便是:

<%@taglib prefix="commonTag" tagdir="/WEB-INF/tags/common"%>
<commonTag:head />

或者定义你自己的 body
<commonTag:head>
  <link rel="stylesheet" href="asset/web/metinfo.css" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui" />
</commonTag:head>

上例子调用了 HTML head 标签。下述 page.tag 依赖此上述 head 头文件,封装了常见的标签。

遍历导航

列出配置文件中的导航,也就是一级菜单。下面分别是遍历一级菜单和二级菜单。

<%@taglib prefix="commonTag" tagdir="/WEB-INF/tags/common"%>
<commonTag:page type="navMenu" />
<commonTag:page type="secondLevelMenu" />

当然,这是封装好的 markup。如果你的 HTML 自定义程度比较高,可以不用上述标签,转为自己写 HTML + JSTL。

标签库在 ajaxjs-web 模块下的 WEB-INF\tags\common\page.tag 中。自定义标签 page.tag 整合了多个常见的 HTML 片断,例如导航、页脚之类的,通过 Tag Files 的属性指定哪个片断(type=XXX)。例如 type=navMenu 则指定引入导航片断,具体被导入如下代码

<%-- 导航 --%>
<c:if test="${type == 'navMenu'}">
  <ul>
    <li><a href="${pageContext.request.contextPath}/">首页</a></li>
  <c:foreach items="${PageNode.navBar}" var="menu">
    <li ${PageNode.isCurrentNode(menu) ? ' class="selected"' : ''}>
      <a href="${pageContext.request.contextPath}/${menu.id}/">${menu.name}</a>
    </li>
  </c:foreach>
  </ul>
</c:if>

可见,如果在当前页面则会高亮显示,加上 class="selected" 样式类。PageNode.isCurrentNode(menu) 是 EL 表达式调用 Java 方法的写法,这里调用 isCurrentNode 方法(Java 实例方法、静态方法均可)。

EL 表达式中的 PageNode 对象是哪里的呢?怎么传进来的呢?从最根源开始说就是…… WEB-INF 里面的 web.xml,加入一个监听器

<!-- 是否启动 JSON 作为网站结构 -->
<listener>
  <listener-class>com.ajaxjs.app.NodeListener</listener-class>
</listener>
<!-- // 是否启动 JSON 作为网站结构 -->

每次请求都会调用 com.ajaxjs.app.NodeListener,该类实现了 javax.servlet.ServletRequestListener 接口。每次请求 request 都会保存 NodeProcessor 对象,即 request.setAttribute("PageNode", new NodeProcessor(request.getContextPath(), uri));。上述 PageNode.isCurrentNode(menu) 就是调用 com.ajaxjs.app.NodeProcessor.isCurrentNode(Map<String, ?> node) 方法。URI 位置

报告页面位置

输入图片说明

<commonTag:page type="anchor" />

分页控件

输入图片说明变量 PageResult 须为 com.ajaxjs.jdbc.PageResultcom.ajaxjs.jdbc.PageResult 类型。

<commonTag:page type="page" pageInfo="${PageResult}"/>

页面小控件

输入图片说明

<commonTag:page type="page" />

<div style="padding:20px 0;" align="right">
  <!-- 分享功能 -->
  <commonTag:widget type="share" />
  <!-- 调整页面字号 -->
  <commonTag:widget type="adjustFontSize" />
</div>

调整页面字号只对页面 <article> <p> 标签有效。

相邻的两笔记录

相邻的两笔记录,需要 neighborRecord 变量。

<commonTag:page type="neighborRecord" />

Tag 的一个限制是标签内不允许再有<%.. Java..%> 语句。对此做法的是把欲输出内容定义在 request 对象中。

<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="tags" tagdir="/WEB-INF/tags/"%>
<%
  request.setAttribute("html", com.ajaxjs.app.App.jsRuntime.eval("JSON_Tree.util.makeSiteMap(bf.AppStru.data, 'aa')"));
%>
<tags:content>
  <jsp:attribute name="body">
    ${html}
  </jsp:attribute>
</tags:content>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sp42a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值