capture/config/foreach/ldelim/rdelim/include

{capture name="foo"}content{/capture}
capture函数的作用是捕获模板输出的数据并将其存储到一个变量里,而不是把它们输出到页面.
在模板中通过 $smarty.capture.foo 访问该变量.


{config_load file="china.conf" section="hebei"}
该函数用于从配置文件中加载变量。加载的路径是以当前文件所在目录为引入路径。
配置文件有可能包含多个部分,此时可以使用附加属性 section 指定从哪一部分中取得变量.
china.conf配置文件格式:

# global variables
beijing="北京"
shanghai="上海"
tianjing="天津"
chongqing="重庆"

[hebei]
shijiazhuang="石家庄"
handan="邯郸"
qinhuangdao="秦皇岛"
zhangjiakou="张家口"
baoding="保定"
tangshang="唐山"
chengde="承德"
langfang="廊坊"
hengshui="衡水"
cangzhou="沧州"
xingtai="邢台"

[zhejiang]
hangzhou="杭州"
ningbo="宁波"
wenzhou="温州"
jiaxing="嘉兴"
huzhou="湖州"
shaoxing="绍兴"
jinhua="金华"
quzhou="衢州"
zhoushan="舟山"
taizhou="台州"
lishui="丽水"

调用语法:{#shijiazhuang#} 注意“#”成对使用。


{foreach name=china23 item=shenshi from=$china_area}
from,待循环数组的名称
item,当前处理元素的变量名称
key,当前处理元素的键名
name,该循环的名称,用于访问该循环
遍历二维数组:
<{foreach name=china23 item=shenshi from=$china_area}>
<{foreach key=key item=item from=$shenshi}>
<{$key}>:<{$item}> <br/>
<{/foreach}>
<{/foreach}>
foreachelse应用案例($china_areaxx未定义数组):
<{foreach name=china33 key=key item=item from=$china_areaxx}>
<{$key}>:<{$item}><br/>
<{foreachelse}>
没有数据!
<{/foreach}>


向页面插入开始/结束符:
<{ldelim}>中国<{rdelim}>,ldelim 和 rdelim 用于输出分隔符。
默认的分隔符为“{”和“}”。


向模板中引入文件:
<{include file="template_file"}>
template_file,以Smarty设定的模板目录为引入路径,向下包含文件。
例如:
<{include file="head.htm"}>和<{include file="/template/head.htm"}>
当前我的Smarty的config文件$Smarty->template_dir设置为“/template”,
第一个才是正确的引入方式。

### JSP中 `forEach` 标签报错的原因分析 在JSP页面中使用 `<c:forEach>` 标签时,如果出现红色波浪线提示错误或者运行时报错,通常是由于以下几个原因之一: #### 1. **未引入 JSTL 标签库** 使用 `<c:forEach>` 标签前,必须确保正确导入了 JSTL 标签库。如果没有声明标签库,则会引发编译错误或 IDE 提示错误。 解决方法是在 JSP 页面顶部添加如下指令[^1]: ```jsp <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ``` #### 2. **缺少必要的依赖包** 如果项目中缺失 JSTL 的相关 jar 文件(如 jstl.jar 和 standard.jar),即使正确声明了标签库,仍然无法正常使用 `<c:forEach>`。 确保项目的 WEB-INF/lib 目录下包含以下两个文件之一: - 对于旧版本的 JSTL:jstl.jar 和 standard.jar。 - 对于新版本的 JSTL:javax.servlet.jsp.jstl-api-*.jar 和实现 jar(例如:org.glassfish.web-jstl-impl-*.jar)。 #### 3. **数据源为空或格式不匹配** 当传递给 `<c:forEach>` 的集合对象为 `null` 或者其类型不符合预期时,也会导致运行时异常。例如,尝试迭代一个非 List 类型的对象可能会抛出 ClassCastException。 正确的做法是先验证传入的数据是否有效再执行循环操作[^2]: ```jsp <c:if test="${not empty myCollection}"> <c:forEach var="item" items="${myCollection}"> ${item} </c:forEach> </c:if> ``` #### 4. **语法错误** 错误的属性名或值设置也可能引起问题。比如将 `items` 属性写成其他名称或将它赋值为非法表达式都会造成解析失败。 --- ### 示例代码展示 下面是一个完整的例子来演示如何安全地应用 `<c:forEach>` 而不会遇到常见陷阱: ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head><title>ForEach Example</title></head> <body> <!-- 假设从控制器传来名为 'users' 的列表 --> <c:if test="${not empty users}"> <ul> <c:forEach var="user" items="${users}"> <li>${user.name}</li> </c:forEach> </ul> </c:if> <c:if test="${empty users}"> No data available. </c:if> </body> </html> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值