Struts2标签

本文深入解析Struts2框架中的通用和UI标签,包括数据标签如set、property、push等,控制标签如iterator、if等,以及表单标签如form、textfield、radio等。通过实例展示如何使用这些标签来简化页面开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:通用标签
1:数据标签
①set
②property
③push(弹栈 将需要的值放到栈顶便于页面获取)
④action(重点 通常用来请求后台,获取初始化的数据 有var的一般为非根对象(非根取值要用#))
⑤url(重点 url标签是为了生成地址所用的,注意与a标签区分)
⑥date
⑦param
⑧debug
⑨url/param/a(重要~用来生成url链接的)

2:控制标签
iterator/if/elseif/else

页面取值的两种方式
${test} , ${requestScope.test}

案例
①jsp页面
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>通用标签</title>
</head>
<body>
	 <h3 style="color: red;">数据标签</h3>
       
          <h3>set</h3>
          <!-- value里面放的是ognl的表达式 实际是集合(ognl上下文)的key
             	在ognl上下文的根对象中取result的值 赋给test1
           -->
          <s:set var="test1" value="result"></s:set>
          ${test1 },${requestScope.test1}
          
          <h3>property</h3>
          <!--取栈顶  cal1(modelDriven)-->
          <s:property/>,
          <!-- 取跟对象的最上面的属性num1 -->
          <s:property value="num1"/>,
          <!--cal2是  TagAction里面的根对象 取跟对象cal2中num属性 -->
          <s:property value="cal2.num1"/>
          
          <h3>push</h3>
          <s:property/>
          <!--弹栈 将需要的值放到栈顶便于页面获取  把result的值即 250谈到栈顶中 -->
          <s:push value="result">
          	<s:property/>
          </s:push>
          <s:property/>
          
          <h3>重点action</h3>
          <!-- action通常用来请求后台,获取初始化的数据 有var的一般为非根对象(非根取值要用#) -->
          <s:action name="tagAction" namespace="/sy" var="test2"></s:action>
          <s:property value="#test2.cal2"/>
          
          <h3>url</h3>
          <!-- url标签是为了生成地址所用的,注意与a标签区分 -->
          <s:url namespace="/sy" action="tagAction" var="test3"></s:url>
          <s:property value="#test3"/>
          
          <a href='<s:property value="#test3"/>'>xxxxxx</a>
          <s:a href="#test3">aaaa></s:a>
         
          <!-- 将其转化为ognl表达式 %{} -->
          <s:a href="%{#test3}">bbbb></s:a>
          
          <h3>param</h3>
          <!-- 带参数 有两种赋值方式
          	①:ognl表达式
          	②:字符串
          -->
          <s:url namespace="/sy" action="tagAction" var="test4">
          	<s:param name="test5">aaa</s:param>
          	<s:param name="test6" value="num1">cccc</s:param>
          </s:url>
          <s:property value="#test4"/>
          
          <h3>date</h3>
          <%
            request.setAttribute("currentDate", new Date());
            request.setAttribute("score", new Integer(70));
            request.setAttribute("names", new String[]{"aa","bb","cc"});
          %>
          <s:date name="#request.currentDate" format="yyyy-MM-dd"/>
          <h3>debug</h3>
          <s:debug/>
          
          
   	 <h3 style="color: red;">控制标签</h3>
   	 	<h3>iterator/if/elseif/else</h3>
   	 	<ul>
	   	 	<s:iterator var="v" value="#request.names">
	   	 		<li>
	   	 			<s:property value="#v"/>
	   	 		</li>
	   	 	</s:iterator>
        </ul>
        
        <s:if test="#request.score>80">
        A
        </s:if>
        <s:elseif test="#request.score>60">
        B
        </s:elseif>
        <s:else>
        C
        </s:else>
</body>
</html>

②entity
package com.zking.three.web;

import com.opensymphony.xwork2.ModelDriven;
import com.zking.one.entity.Cal;

public class TagAction implements ModelDriven<Cal>{
	/**
	 * 栈底部为 TagAction 里面有 cal2,num1,result 栈顶为ModelDriven对象 cal1
	 * 压栈是两个栈都为空的 通过前台传值num1=20 先取栈顶 通过反射把num1=20赋给cal
	 */
	
	
	private Cal cal1=new Cal();
	private Cal cal2;
	private String num1;
	private String result;
	
	public String execute() {
		System.out.println(cal1);//cal1.getNum1()=20
		System.out.println(cal2);//cal2.getNum1()=null
		System.out.println(num1);//null=null
		return "demo3";
	}

	public Cal getCal2() {
		return cal2;
	}


	public void setCal2(Cal cal2) {
		this.cal2 = cal2;
	}

	public String getNum1() {
		return num1;
	}


	public void setNum1(String num1) {
		this.num1 = num1;
	}



	public String getResult() {
		return result;
	}

	public void setResult(String result) {
		this.result = result;
	}

	@Override
	public Cal getModel() {
		return cal1;
	}

}

③struts-sy.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- namespace:在内存中划分具体的控件
	name:给package包取个名字 可以继承
 -->
	<package name="sy" extends="base" namespace="/sy">
	<action name="tagAction" class="com.zking.three.web.TagAction">
	 <result name="demo3">/demo3.jsp</result>
	</action>
	</package>
</struts>

二:UI标签
1:表单标签
① form
② textfield 文本框
③radio
radio中list的两种赋值方式(必须要写name)
<s:radio name=“sex” list="{‘男’,‘女’ }" label=“性别” value="‘男’"></s:radio>
<%-- <s:radio name=“sex” list="#{1:‘男’,2:‘女’ }" label=“性别” value=“2”></s:radio> --%>
④ select下拉框
⑤ textarea文本域
⑥ hidden隐藏域
⑦checkbox/checkboxlist复选框(传值是boolean类型的)
⑧ submit

demo
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>表单标签</title>
</head>
<body>
	crud详细讲解
	 <h3 style="color: red;">表单标签</h3>
          <h3>form</h3>
          <h3>textfield</h3>
          <h3>radio</h3>
          <h3>select</h3>
          <h3>textarea</h3>
          <h3>hidden</h3>
          <h3>submit</h3>
          
          <s:form namespace="" action="">
          <s:textfield name="uname" label="姓名"></s:textfield>
          <s:radio name="sex" list="{'男','女' }" label="性别" value="'男'"></s:radio>
          <%-- <s:radio name="sex" list="#{1:'男',2:'女' }" label="性别" value="2"></s:radio> --%>
          
          <s:select name="deptName" list="#{1:'财务部',2:'后勤部',3:'人事部' }" label="部门选择" />
          
          <!-- 单选复选框,往后台传值是传boolean类型 -->
          <s:checkbox name="married" label="是否已婚"/>
          
          <s:checkboxlist name="hobby" label="爱好" list="#{1:'篮球',2:'攀岩',3:'时尚' }"></s:checkboxlist>
          
          <s:textarea name="remark" label="个人简介"/>
          <s:hidden name="xxx" value="曾经的我们是那么的单纯"/>
          </s:form>
  
</body>
</html>

三:标签的属性类型说明
String 字符串
Boolean true|false
Object
Object/String 传过去字符串,但会被认为是一个 OGNL表达式进行计算

%{str}:str会被强制转换成OGNL表达式计算
<s:a href="%{#url1}">bbb</s:a>

标签的公共属性
var 将值保存到上下文(ActionContext)中的一个key

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值