继续Struts的学习,加油

今天所讲的知识点
A Struts的logic标签
B Struts的html标签
C Struts的分发Action
D Struts的文件上传


我对知识点的分析
A Struts的logic标签
一、logic:present与logic:notPresent
1、logic:present:判断属性范围中某个属性是否存在(即判断是否为null值),如果存在,则进入该标签内的代码中
<%
User user = new User();
user.setUserid("MLDN");
request.setAttribute("user",user);
%>
<logic:present name="user" property="birthday" scope="request">
存在
</logic:present>
类似的logic:notPresent:判断属性范围中属性不存在,如果不存在,进入该标签中的代码
说明:
(1)其中name表示属性名称,property表示属性对象中的某个属性,如果包含了property,则先判断属性对象是否存在,如果存在,再判断其中的属性是否存在。
(2)scope表示判断属性所在的范围,如果没有配置scope范围,则从4种属性范围中依次寻找,只要找到任意一个,则表示存在
2、可以通过parameter属性判断某个传递的参数是否存在
<logic:present parameter="id" >
存在
</logic:present>
<logic:notPresent parameter="id">
不存在
</logic:notPresent>
3、类似的还有cookie和header,分别用来判断是否包含cookie或header信息

二、logic:equal与logic:notEqual
logic:equal:当属性范围中的某个属性的值与另一个值相等时,执行该标签中的代码
同理:logic:notEqual,判断不相等
<%
User user = new User();
user.setUserid("MLDN");
session.setAttribute("user",user);
%>
<logic:present name="user" property="userid" scope="request">
<logic:equal value="MLDN" name="user" property="userid" scope="request">
相等
</logic:equal>
</logic:present>
说明:(1)其中value表示等号右边的值,该值只能为字符串或数字等基本类型
(2)name和property使用方式与之前相同,但必须保证name存在才可以比较property,否则会出现异常,因此一般先使用logic:present判断存在后,再进行比较。
(3)scope表示属性的范围
(4)当对两个属性范围中属性对象的某项进行比较时,需要将等号右边的值(value属性)加入EL表达式进行输出。
<%
User user = new User();
user.setUserid("MLDN");
session.setAttribute("user",user);

user = new User();
user.setUserid("MLDN");
request.setAttribute("user",user);

%>
<logic:equal value="${requestScope.user.userid}" name="user" property="userid" scope="session">
相等
</logic:equal>

三、logic:greaterThan(大于)与logic:lessEqual(小于等于)
<logic:greaterThan value="100" name="user" property="age" scope="session">
大于
</logic:greaterThan>
<logic:lessEqual value="100" name="user" property="age" scope="session" >
小于等于
</logic:lessEqual>

四、logic:lessThan(小于)与logic:greaterEqual(大于等于)

五、logic:match(一般不使用),用来完成字符串模糊查询的
判断属性范围的属性或属性对象的属性,或参数中等是否包含value指定的字符串

六、迭代输出
1、使用logic:iterate标签进行迭代
<!-- 这里的id表示循环迭代中设置到page范围的属性名称 -->
<!-- 这里的name表示属性范围的属性(集合)名称 -->
<logic:iterate id="num" name="all" scope="request">
${num.userid }<br>
</logic:iterate>

2、可以通过indexId索引属性来设置显示格式
(1)实现单双行变色的功能
<logic:iterate id="num" name="all" scope="request" indexId="index">
<font color="${index%2==0?"red":"green" }">${num.userid }</font><br>
</logic:iterate>
(2)还可以通过indexId完成每行显示3(多)条记录的功能
<logic:iterate id="num" name="all" scope="request" indexId="index">
<font color="${index%2==0?"red":"green" }">${num.userid }</font>
<bean:define id="temp" value="${index%3}"></bean:define>
<logic:equal value="2" name="temp">
<br>
</logic:equal>
</logic:iterate>

3、可以通过length和offset属性完成假分页功能
<logic:iterate id="num" name="all" scope="request" length="10" offset="20">
${num.userid } <br>
</logic:iterate>
<!-- 循环前先进行判断 -->
<logic:present name="all" scope="request">
<!-- 这里的id表示循环迭代中设置到page范围的属性名称 -->
<logic:iterate id="num" name="all" scope="request" indexId="index" length="10" offset="20">
${num.userid }<br>
</logic:iterate>
</logic:present>

B Struts的html标签
一、超链接
1、普通HTML:<a href=”xxx?id=1”>连接</a>
2、html标签:<html:link></html:link>
<html:link href="bean.jsp" paramId="id" paramName="id">连接</html:link>
如果要传递多个参数,必须设置Map属性
<a href="bean.jsp?id=4&status=delete">连接</a> <br>
<%
Map m = new HashMap();
m.put("status","list");
m.put("id",4);
request.setAttribute("myparam",m);
%>
<html:link href="bean.jsp" name="myparam">连接</html:link>

二、表单
1、普通HTML:<form action=””> </form>
2、html标签:<html:form action=””></html:form>
使用html:form提交路径必须存在,而且必须路径指向Struts的某个action路径(必须为xxx.do),还有必须为绝对路径,必须从WebRoot下开始填写
3、html:form中可以包含普通html元素,但普通的form中绝对不允许包含html:text等html标签的输入元素,否则会出现异常。
4、 html:form没有单独设置的name属性,其name的值为struts-config.xml中对应ActionForm的name属性。

三、表单的其他元素
1、
普通HTML html标签
密码框 <input type=”password” name=””> <html:password property></html:password>
文本域 <textarea></textarea> <html:textarea property></html:textarea>
文本框 <input type=”text” name=””> <html:text property></html:text>
使用html:text等标签可以自动完成回填功能,使用property设置属性名称,如果在ActionForm中该属性不存在,则出现异常
<html:form action="regist.do">
文本框:<html:text property="user.userid"></html:text><br>
密码框:<html:password property="user.password"></html:password><br>
文本域:<html:textarea property="content" rows="5" cols="30" value="abc"></html:textarea> <br>
<input type="submit" value="提交">
</html:form>
这里的textarea,默认值需要通过value属性进行设置,而不是通过直接在textarea标签的开始和结束标记之间中进行编写

2、
普通HTML html标签
单选按钮 <input type=”radio” name=””> <html:radio property></html:radio>
下拉列表 <select><option></option></select> <html:select property></html:select>
可以自动回填,设置默认值需要通过ActionForm进行设置,而不能使用checked或selected
性别:<html:radio property="sex" value="男">男</html:radio>
<html:radio property="sex" value="女">女</html:radio><BR>
选择所在城市:
<html:select property="city">
<html:option value="1">北京</html:option>
<html:option value="2">上海</html:option>
<html:option value="3">深圳</html:option>
<html:option value="4">其他</html:option>
</html:select>
private String sex = "男" ;
private int city = 2 ;

对于下拉列表还可以通过html:options的形式进行设置全部值
选择所在城市:
<html:select property="city">
<html:options collection="all" labelProperty="title" property="id"/>
</html:select>
colloction表示保存所有数据的集合属性名称,labelProperty表示option中显示的文本内容所对应的属性名,property表示option中value值所对应的属性名。


3、
普通HTML html标签
多选按钮 <input type=”checkbox” name=””> <html:checkbox property></html:checkbox>
<html:multiboxt property></html:multibox>
使用html:checkbox时,该多选框无法设置默认值
而html:multibox可以通过默认值的形式来设置默认选中
喜欢的运动:
<html:checkbox property="sports" value="1"></html:checkbox>足球
<html:checkbox property="sports" value="2"></html:checkbox>篮球
<html:checkbox property="sports" value="3"></html:checkbox>乒乓球
<html:checkbox property="sports" value="4"></html:checkbox>羽毛球
喜欢的运动:
<html:multibox property="sports" value="1"></html:multibox>足球
<html:multibox property="sports" value="2"></html:multibox>篮球
<html:multibox property="sports" value="3"></html:multibox>乒乓球
<html:multibox property="sports" value="4"></html:multibox>羽毛球


C Struts的分发Action
可以使用分发Action将每一个操作单独定义一个方法,根据某一个状态参数决定自动调用其中的一个方法。
一、实现方法
1、使用的Action类为DispatchAction
2、将每个操作单独定义为方法,方法的返回值和参数与execute方法一致,方法名为传递的状态参数的具体值(即status状态参数的值)
3、将原有的execute方法删除
4、在struts-config.xml中设置参数名称,根据该参数来确定所设置的方法名(来决定调用哪个方法)
<action attribute="userForm" input="/error.jsp" name="userForm"
path="/user" scope="request" parameter="status"
type="org.liky.struts.action.UserAction">
<forward name="list" path="/list.jsp"></forward>
<forward name="forward" path="/forward.jsp"></forward>
<forward name="update" path="/update.jsp"></forward>
</action>

二、实现原理
DispatchAction的execute方法中取得了patameter设置的参数值(status的值),再根据该值通过反射调用与该值同名的方法自动执行,接收返回结果,将结果返回给,ActionServlet进行跳转

D Struts的文件上传
一、页面上需要设置的
如果需要进行文件上传,就必须对表单进行多媒体封装
<html:form action="user.do" method="post" enctype="multipart/form-data">
文件域
用户照片:<html:file property="photo"></html:file>
二、参数接受你
此处不需要修改其他参数的接收方法,还是使用ActionForm进行自动接收
而文件需要使用Struts提供的封装文件类(FormFile)单独进行接收
三、文件上传及保存
在Struts中,如果要进行文件保存,需要使用IO流操作:需要使用字节的输出流(OutputStream)

在ActionForm中进行处理文件名
在Action中处理文件保存
示例,参见StrutsCRUDDemo



个人总结:
作业StrutsCRUDDemo(已解决)
1、问题1:数据库连接的Driver路径写错,报错,找不到Driver
private static final String DBDRIVER="org.git.mm.mysql.Driver";(错误)
private static final String DBDRIVER="org.gjt.mm.mysql.Driver";

2、文件上传,表单没有封装
ActionForm在接受参数时,文件参数接收类型不匹配错误
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值