JavaWeb -- Struts2 构建视图:标签和结果, UI组件标签
1. 示例
action 注入数据 和 处理action
/**
* OgnlAction
*/
public class UiAction extends ActionSupport {
private static final long serialVersionUID = -6933309304624396640L; /* 婚否 */
private boolean married = true;
/* javabean集合 */
private List userList; /*省集合*/
private List<Area> provinces ; /* 选中的id */
private Integer selectedId = 10; public List getUserList() {
return userList;
} public void setUserList(List userList) {
this.userList = userList;
} public String reg() {
popUserList();
return "success";
} public String toRegView() {
System.out.println("toRegView");
return "loginView";
} /**
* 保存数据,
*/
public String saveData(){
popUserList();
popProvinces();
return "showView" ;
} /**
* 组装用户集合
*/
private void popUserList(){
userList = new ArrayList<User>();
User u = null ;
for(int i = 0 ; i < 10 ; i ++){
u = new User();
u.setId(1 + i);
u.setName("tom" + i);
u.setAge(20 + i);
userList.add(u);
}
} /**
* 组装province集合数组
*/
private void popProvinces(){
provinces = new ArrayList<Area>();
Area p1 = new Area(1,"1号省");
p1.getCities().add(new Area(11,"1.1城市"));
p1.getCities().add(new Area(12,"1.2城市"));
p1.getCities().add(new Area(13,"1.3城市")); Area p2 = new Area(2,"2号省");
p2.getCities().add(new Area(21,"2.1城市"));
p2.getCities().add(new Area(22,"2.2城市"));
p2.getCities().add(new Area(23,"2.3城市"));
provinces.add(p1);
provinces.add(p2);
} public boolean isMarried() {
return married;
} public void setMarried(boolean married) {
this.married = married;
} public Integer getSelectedId() {
return selectedId;
} public void setSelectedId(Integer selectedId) {
this.selectedId = selectedId;
} public List<Area> getProvinces() {
return provinces;
} public void setProvinces(List<Area> provinces) {
this.provinces = provinces;
}
}
showview.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>showView.jsp</title>
<style type="text/css">
.even{
background-color: blue;
} .odd{
background-color: yellow;
}
</style>
</head>
<body>
<br>
------------------------------------------------------------------------<br>
request.username = <s:property value="#request.username" /><br>
session['username'] = <s:property value="#session.username" /><br>
application.username = <s:property value="#application.username" /><br>
attr.username = <s:property value="#attr.username" /><br>
parameters.username = <s:property value="#parameters.username" /><br>
vs.username = <s:property value="username" /><br>
vs.username = ${request['struts.valueStack']}<br>
<!-- 强制ognl表达式解析 -->
<s:textfield name="#session.username" label="%{#request.username}"/><br>
------------------------------------------------------------------------<br>
s:property<br>
<s:property value="'<hr>tom'" escape="false"/>
<br>
------------------------------------------------------------------------<br>
s:set:如果没有指定范围,则存放ActioinContext自身的map中,<br>
<s:set var="applicationmyname" value="#session['username']" />
<s:property value="applicationmyname" />
<br>------------------------------------------------------------------------<br>
s:push,将对象放到栈顶,标签结束后从栈顶删除<br>
<s:push value="#application.username">
<s:property/>
</s:push>
<br>------------------------------------------------------------------------<br>
s:bean,将创建新的javabean对象,到栈顶也可指定actionContextmap自身中<br>
<s:bean name="cn.itcast.struts2.model.User" var="mybean">
<s:param name="name" value="#request.username" />
<s:property value="name"/>
</s:bean>
<s:property value="#mybean.name"/>
<br>------------------------------------------------------------------------<br>
s:action,在jsp直接调用某个action.<br>
<s:action name="RegAction_toRegView" namespace="/regns" executeResult="true"/>
<br>------------------------------------------------------------------------<br>
s:iterator,迭代集合属性的<br>
<table border="1">
<tr>
<td>count</td><td>index</td><td>name</td><td>age</td><td>状态</td>
<td>编辑</td><td>查看</td>
</tr>
<s:iterator value="userList" var="u" status="st">
<tr class='<s:property value="#st.even?'even':'odd'" />'>
<td><s:property value="#st.count" /></td>
<td><s:property value="#st.index" /></td>
<td><s:property value="#u.name" /></td>
<td><s:property value="#u.age" /></td>
<td>
<s:if test="#u.age < 23">少年</s:if>
<s:elseif test="#u.age > 27">老年</s:elseif>
<s:else>中年</s:else>
</td>
<td>
<s:url action="UserAction_edit" namespace="/user" var="editUrl" escapeAmp="false">
<s:param name="id" value="#u.id" />
<s:param name="name" value="#u.name" />
</s:url>
<a href='<s:property value="#editUrl"/>'>编辑</a>
</td>
<td><a href='<s:url action="UserAction_view" namespace="/user"><s:param name="id" value="#u.id" /></s:url>'>查看</a></td>
</tr>
</s:iterator>
</table>
<br>------------------------------------------------------------------------<br>
s:url,访问url资源<br>
<s:url includeParams="all" var="myurl"/>
<s:property value="myurl"/>
<br>------------------------------------------------------------------------<br>
s:i18n,s:text通常结合在一起使用,访问指定资源文件中串<br>
<s:i18n name="cn.itcast.struts2.action.RegAction_zh">
<s:text name="label.age" var="mytext"/>
</s:i18n>
<s:property value="#mytext"/>
<br>------------------------------------------------------------------------<br>
访问集合的大小以及是否为空<br>
userList.size = <s:property value="userList.size"/><br>
userList.isEmpty = <s:property value="userList.isEmpty"/>
<br>------------------------------------------------------------------------<br>
ognl表示定义集合<br>
<s:iterator value="{'tom1','hjerry3','tomca5','kking7','jerrli9'}">
<s:property /><br>
</s:iterator>
<br>------------------------------------------------------------------------<br>
ognl定义map集合<br>
<s:iterator value="#{100:'tom',200:'jerry',300:'kingkong'}">
key = <s:property value="key" /> : value = <s:property value="value" /><br>
</s:iterator>
<br>------------------------------------------------------------------------<br>
集合的过滤<br>
<s:iterator value="userList.{?#this.age > 25}">
<s:property/><br>
</s:iterator>
集合的投影<br>
<s:iterator value="userList.{name}">
<s:property/><br>
</s:iterator>
<br>------------------------------------------------------------------------<br>
ognl表达式调用方法<br>
<s:property value="sayHello(#session.username)"/>
<br>------------------------------------------------------------------------<br>
ognl调用任意类的静态方法<br>
<s:property value="@cn.itcast.struts2.action.HelloWorldAction@sayStaticHello(#session.username)"/>
<br>------------------------------------------------------------------------<br>
主题:<br>
<s:form theme="xhtml">
<s:textfield name="username" label="UserName" />
</s:form>
<br>------------------------------------------------------------------------<br>
s:textfield标签<br>
<s:textfield name="username" key="label.name.global" theme="xhtml" value='%{username}'/>
<br>------------------------------------------------------------------------<br>
s:checkbox<br>
<s:checkbox name="married" label="婚否" />
</body>
</html>
reg.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>reg.jsp</title>
</head>
<body>
<s:debug />
<s:form namespace="/ui" action="UiAction_reg" method="post" theme="xhtml">
<s:checkbox name="married" label="婚否" />
<s:select list="#{101:'tom',202:'jerry',303:'kingkong'}" label="username"
listKey="key" listValue="value"/>
<s:select name="selectedId" list="userList" listKey="id" listValue="name" label="UserName"/>
<s:radio name="sex" list="#{0:'男',1:'女'}" label="性别" />
<s:checkboxlist name="hobby" list="#{0:'足球',1:'篮球',2:'乒乓球'}" label="爱好"/>
<s:doubleselect name="selectProvinceId" list="provinces" listKey="id" listValue="areaName"
doubleName="selectedCityId" doubleList="cities" doubleListKey="id" doubleListValue="areaName"
label="区域"/>
<s:submit />
</s:form>
</body>
</html>
关联选择 area 区域类
package cn.itcast.struts2.model; import java.util.ArrayList;
import java.util.List; /**
* 区域类
*/
public class Area {
private Integer id ;
private String areaName ;
private String areaNo ;
private int type ; /* 省所属城市集合 */
private List<Area> cities = new ArrayList<Area>(); public Area(Integer id, String areaName) {
this.id = id;
this.areaName = areaName;
} public Area(Integer id, String areaName, String areaNo) {
this.id = id;
this.areaName = areaName;
this.areaNo = areaNo;
} public Area(Integer id, String areaName, String areaNo, int type) {
this.id = id;
this.areaName = areaName;
this.areaNo = areaNo;
this.type = type;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAreaName() {
return areaName;
}
public void setAreaName(String areaName) {
this.areaName = areaName;
}
public String getAreaNo() {
return areaNo;
}
public void setAreaNo(String areaNo) {
this.areaNo = areaNo;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
} public List<Area> getCities() {
return cities;
} public void setCities(List<Area> cities) {
this.cities = cities;
}
}
<s:doubleselect /> 产生的级联菜单是换行的, 可通过如下方式解决 s:doubleselect 换行的问题。
<style type="text/css">
.nobr br{display:none;}
</style>
在有s:doubleselect 的 s:form 表单上套上div
<div class="nobr">
<s:form> ...... </s:form>
</div>
http://blog.csdn.net/shangpusp/article/details/4956011
JavaWeb -- Struts2 构建视图:标签和结果, UI组件标签的更多相关文章
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(六)Picker View视图 学习笔记
想对PickerView进行操作,只能在代码中操作. 下面 ,再添加三个label组件,然后将所有组件配置到代码中(看代码),然后要实现对PickerView的操作,就要实现它的DataSource协 ...
- Struts2第十一篇【简单UI标签、数据回显】
Struts2UI标签 Sturts2为了简化我们的开发,也为我们提供了UI标签-也就是显示页面的标签-.. 但是呢,Struts2是服务端的框架,因此使用页面的标签是需要在服务器端解析然后再被浏览器 ...
- ASP。NET Core路到微服务第01部分:构建视图
下载Part 1 source - 2.9 MB 介绍 说,如果你觉得有点失望找不到任何实际microservices在这篇文章中,这是因为有很多科目我想盖,它不可能谈论他们所有人(或讨论的多)在一篇 ...
- SpringMVC(三)-- 视图和视图解析器、数据格式化标签、数据类型转换、SpringMVC处理JSON数据、文件上传
1.视图和视图解析器 请求处理方法执行完成后,最终返回一个 ModelAndView 对象 对于那些返回 String,View 或 ModeMap 等类型的处理方法,SpringMVC 也会在内部将 ...
- 创建一个pre标签展开折叠的UI组件(原创)
这些天练习UI组件的编写,顺便模仿一个h5版本的pre标签收缩展开的效果组件: 兼容ie8.9,谷歌,火狐: 图片效果如下: demo.html代码: <!DOCTYPE html> &l ...
- 布局技巧1:创建可重用的UI组件(include标签)
Android平台提供了大量的UI构件,你可以将这些小的视觉块(构件)搭建在一起,呈现给用户复杂且有用的画面.然而,应用程序有时需要一些高级的视觉组件.为了满足这一需求,并且能高效的实现,你可以把多个 ...
- JavaWeb学习记录(十九)——jstl自定义标签库之传统标签
一.传统标签 (1)JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法. public void setPageContext(PageCo ...
- JavaWeb学习记录(十九)——jstl自定义标签之简单标签
一.简单标签共定义了5个方法: setJspContext方法 setParent和getParent方法 setJspBody方法 doTag方法 二.方法介绍 osetJspContext方法 用 ...
- 目前比较火的前端框架及UI组件
看到的一篇总结性的文章,收藏一下,感兴趣的可以自己看看,哪些是已经会的,哪些是没听说过的,哪些是一知半解的,都可以稍微看看. 一.前端框架库: 1.Zepto.js 地址:点击打开链接 描述:Zept ...
随机推荐
- 《从零开始学Swift》学习笔记(Day 58)—— Swift编码规范之变量或常量声明规范
原创文章,欢迎转载.转载请注明:关东升的博客 声明是在声明变量.常量.属性.方法或函数和自定义类型时候需要遵守的规范. 首先变量或常量时每行声明变量或常量的数量推荐一行一个,因为这样以利于写注释.示例 ...
- xshell 没有反应---Xshell按ctrl+s界面无反应的解决办法
在用Xshell管理远程服务器,特别是在用vi编辑配置文件时,总是习惯的用ctrl+s想要保存文件,然后就悲剧了.xsell就再也没有返应只能关了重新打开.但原来修改的文件算是报废了. 在网上搜索了一 ...
- SQL中的函数 •Aggregate 函数 •Scalar 函数
合计函数 :Aggregate是针对一系列值的操作,返回一个单一的值 Scalar 函数是针对一个单一的值的操作,返回基于输入值的一个单一值 合计函数: AVG()返回某列的平均值:COUNT()返 ...
- 一篇搞定vue-router
由于Vue常见于前后端分离开发场景下,所以页面跳转工作全部交给了前端,所以基于集中管理的原则,就有了vue-router插件,它给定了url和组件之间的跳转规则 Demo准备 vue init web ...
- Selenium定位不到指定元素原因之iframe(unable to locate element)
浏览过程中,图片中的内容可能太小,无法看清,可以>右键>在新标签中打开 Outline 项目原因,需要用selenium实现模拟登陆.模拟上传文件,自然就需要模拟点击[上传]按钮: 模拟点 ...
- eclipse导入项目,项目名出现红叉的情况(修改版)
转至:http://blog.csdn.net/niu_hao/article/details/17440247 今天用eclipse导入同事发给我的一个项目之后,项目名称上面出现红叉,但是其他地方都 ...
- sql查询原理和Select执行顺序
一 sql语句的执行步骤 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3)视图转换,将涉及视图的 ...
- python全栈开发从入门到放弃之字符串的应用
1.strip strip 脱去(...的)衣服 去掉左右两边的空白msg=' hellprint(msg) 1 print(msg.strip()) #去掉左右两边的空白 2 3 hello 4 h ...
- Uber中国在地方城市的人员架构是怎样的?
http://www.thepaper.cn/newsDetail_forward_1390516 澎湃新闻:Uber中国在地方城市的人员架构是怎样的? 柳甄:一般是3人组成的小团队作战.一名城市 ...
- html基本标签介绍及应用
<!-- html标签 特征: 1.空白折叠现象 2.对空格和换行不敏感 3.标签要严格封闭 p标签的嵌套 多注意!!!!!! html中: 1.行内标签(不换行) (1)在一行内显示 span ...