Struts初级笔记

◆★◎☆
◆Struts就是apache提供好的免费MVC实现框架,是用来替代Servlet的。
☆注意在LoginForm.java和LoginAction.java中设置错误信息的不同之处:
前者:
public ActionErrors validate(ActionMapping mapping,
   HttpServletRequest request) {
  ActionErrors errors = new ActionErrors();}
  errors.add("errname",new ActionMessage("property_name"));
  return errors;
后者:
public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  ActionMessages errors = new ActionMessages();
  errors.add("error", new ActionMessage("errlogin"));
  super.saveErrors(request, errors);
  return mapping.getInputForward();    //跳转到错误页
  //如何跳转到自己在struts-config.xml中设置的路径呢:
  //<forward name="succ" path="/login_success.jsp"></forward>
  return mapping.findForward("succ");
}
☆并同时注意两种跳转区别:
 return mapping.getInputForward();    //跳转到错误页
 //如何跳转到自己在struts-config.xml中设置的路径呢:
 //特别是当文件不在根目录下时,好像就不能正常跳转哦?这种情况使用../或者../../XX.do后退即可
 //当所有文件位于根目录下的同一个文件夹下时,从一个页面超链接到另一
   个页面超链接这样写,注意没有/符号哦:<a href="login_struts/note.jsp">点击这里进入留言管理页面</a>
   也就是说当需要连接action时就需要使用../或者../../XX.do后退,其他写全路径。
 //<forward name="succ" path="/login_success.jsp"></forward>
 return mapping.findForward("succ");
◆struts中有很多标签库,目的就是减少页面中代码段,开发原则就是尽量不出现代码段<% %>,以便维护
<bean/>  <logic/>  <html/>

<bean>标签:
★<bean:define/>标签:
 <bean:define id="str" value="wo si"/> //如何输出定义的这个属性呢?
 一是使用EL表达式: <h2>${str}</h2>
 二是使用《bean》输出标签:<h2><bean:write name="str"/></h2>
 这里强调一下:只要是id就表示是一个存放在4中属性范围之内的名称,只要是name就表示使用存放在四种属性范围之中的一个对象
★<bean:size/>标签:主要是求出长度(数组,Connection,Map)
 Map m = new HashMap(); m.put("one",1);m.put("two","2");
 //要先将Map对象放在4中属性范围之内
 request.setAttribute("myMap",m);
 <bean:size id = "myMapLen" name="myMap" scope="request"/>;
 <h2>长度为:&{myMaplLen}</h2>
 
★<bean:write/>标签:打印,也可打印对象中的属性
 Person p = new Person();p.setName("wjr"),p.setPassword("530");
 //要先将p对象放在4中属性范围之内
 request.setAttribute("myPerson",p);
 &{p.name}  //使用EL输出
 <bean:write name="myPerson" property="name" scope="request"/>
 在jsp 2.0中可以使用EL代替<bean:write/>标签
 而且,只要是标签,在开发中就可以相互调用,即是jsp标签与struts标签可一起使用。因为他们都是对4中属性进行操作

★<bean:message/>标签:
作用:
1.操作struts中的properties资源文件内容:
例如,在properties资源文件中有:Welcome = <h1>jfoiajajgejg,那如何使用该值呢???
 <bean:message key= "Welcome" />  //这块值就等于:.jfoiajajgejg

在该标签中,还提供了一个占位功能:Welcome = <h1>jfo{0}iajajgejg,
 <bean:message key= "Welcome" arg0="wjr" />  //这块值等于:.jfowjriajajgejg
2.国际化:
即是配置多个properties资源文件,并在该文件名后加上:_语言代码就可以了:例如:
 ApplicationResources.properties
 ApplicationResources_en_US.properties //表示英语
 然后分别在不同properties资源文件中写入相应要显示的不同内容
 浏览器会自动根据它当前的语言环境自动匹配相应的properties资源文件。

Logic标签:
★<logic:present/>和<logic:notPresent>:判断某值是否在某个属性范围之内
 request.setAttribute("rname","wjr"); session.setAttribute("sname","wjr");
 <logic:present name="sname" scope="session">有该属性:&{sname}</logic:present>
 <logic:notPresent name="sname" scope="session">没有有该属性:&{sname}</logic:notPresent>
如果你没有指定属性范围,则按照顺序进行判断  
★逻辑运算标签:
 =:<logic:equal name="rname" scope="request" value="wjr">该属性值等于wjr:${rname}</logic:equal>
!=:<logic:notEqual name="rname" scope="request" value="wjr">该属性值不等于wjr:${rname}</logic:notEqual>
>=:request.setAttribute("ref",new Character('1'));
 <logic:greaterEqual name="rname" scope="request" value="wjr">该属性值等于wjr:${rname}</logic:greaterEqual>
<=:<logic:lessEqual name="rname" scope="request" value="wjr">该属性值等于wjr:${rname}</logic:lessEqual>
 <:<logic:lessThan name="rname" scope="request" value="wjr">该属性值等于wjr:${rname}</logic:lessThan>
 >:<logic:greaterThan name="rname" scope="request" value="wjr">该属性值等于wjr:${rname}</logic:greaterThan>
//注意上面属性对象,可以自动转化为整型类型进行比较

迭代标签:<logic:iterator id="实例化对象" name="属性范围" scope="查找范围"> 是struts比较重要常用的标签。
★List all = new ArrayList(); all.add("wjr"); add("huanhuan");
//先将对象保存到4重属性之中
request.setAttribute("list",all);
<logic:iterator id="str" name="list" scope="request">
<h2>&{str}</h2>
</logic:iterator>
输出Set对象也跟上面一样,但是输出Map对象就不另外了,因为本省Map对象就不支持迭代输出。
但是在struts迭代标签中。输出都一样:
Map m = new Hash Map(); m.put("name","wjr"); m.put("name2","huanhuan");
//先将对象保存到4重属性之中
request.setAttribute("map",m);
<logic:iterator id="ma" name="map" scope="request">
<h2>&{str.name}</h2><h2>&{str.value}</h2>
</logic:iterator>
要是不使用表达式语言输出怎么办呢??
<logic:iterator id="ma" name="map" scope="request" property="value">
<h2>&{str}</h2>  //这时就只输出对象的value值。
</logic:iterator>

struts html标签:
★ 对于struts表单乱码设置有两种方法:
 一是通过设置过滤器
 二是在XXXXForm中的reset()方法中设置:request.setCharacterEncoding("gbk");
★注意:在struts表单中,给单选按钮,复选框,下拉列表框等赋初始值,不能在标签中使用 checked关键字,
        要通过在XXXForm.java中设置相应初始值才行。
例如:一个性别单选按钮表单:
 <html:radio property="sex" value="男">男</html:radio>
    <html:radio property="sex" value="女">女</html:radio>
 在XXXForm.java中是这样定义sex变量的:private String sex;
你要这样改成:private String sex = "男";
这时你再打开表单页面,男选项就自动默认选中了。

下拉列表框:
选择所喜欢的城市:
   <html:select property="city">
    <html:option value="BJ">北京</html:option>
    <html:option value="TJ">天津</html:option>
    <html:option value="NJ">南京</html:option>
    <html:option value="GD">广东</html:option>
    <html:option value="DB">东北</html:option>
   </html:select>

同样,如果你想设置单选或者下拉列表默认选项,就像下面这样在XXXForm.java中修改:
 private String sex = "女";
 private String city="TJ";

但是复选框就有点不一样了,因为复选框选中之后返回的是一个字符串数组,所以定义的时候就要定义成数组:
 private String fruit[];
表单内容为:
 选择所爱吃的水果:
   <html:checkbox property="fruit" value="orange"/>橘子
   <html:checkbox property="fruit" value="banana"/>香蕉
   <html:checkbox property="fruit" value="apple"/>苹果
   <html:checkbox property="fruit" value="watermelon"/>西瓜
   <html:checkbox property="fruit" value="cherry"/>樱桃
因为输出的结果是一个数组,所以这样输出:
for(int i=0;i<tag_htmlForm.getFruit().length;i++)
{
 System.out.println("你爱吃的水果是:"+tag_htmlForm.getFruit()[i]);
}
那如何设置复选框的默认选项呢??是否还是直接设置默认值就可以了呢??答案是不行
在struts中这种情况要使用<html:multibox>标签并配合<logic:iterate>一起使用才行:
表单具体内容现在变为:
 选择所爱吃的水果:
   <logic:iterate id="fru" name="tag_htmlForm" property="fruit">
    <html:multibox property="select">${fru}</html:multibox>${fru}
   </logic:iterate>
 那么上面的<html:multibox>又该如何设置呢?变量定义直接变为如下了:
 private String sex ;
 private String city ;
 private String fruit[] = {"橘子","苹果","cherry","香蕉","watermelon"} ;
 private String select[] = {"橘子","苹果","cherry"} ;
当然这时输出就得从tag_htmlForm.getSelect()中输出了:
 for(int i=0;i<tag_htmlForm.getSelect().length;i++)
  {
   System.out.println("你爱吃的水果是:"+tag_htmlForm.getSelect()[i]);
  }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值