`
hilly
  • 浏览: 49827 次
  • 性别: Icon_minigender_1
  • 来自: **
社区版块
存档分类
最新评论

struts标签之浅入深出(转)

阅读更多
Action和jsp的开发其实就是对Struts标签的运用.掌握标签的熟练程度决定了开发效率.初学者往往对某个数据表示或数据获取,束手无策.一个简单的问题浪费一两天时间也就不足为怪了.导致整个开发进度延后.外面的struts书籍介绍标签和数据传输原理都比较简单,下面我对标签技术和数据传输原理,进行全方位多角度的剖析.希望对各位有所帮助.以此为模版,将大大提高开发效率.以sample为机能名称.
①画面上有一text框,显现内容为某一数据表中的某一字段.那我们该如何设置和得到此数据呢?
SampleJsp:
  <html:text name = "sampleForm" property="name" />
SampleForm.java: // form文件名必须和jsp中标签的name对应
  String name; // 必须和jsp中该项目的property一样
  public String getName() { return name; }
  public void setName(String name) { this.name = name;}
变量和方法名,不可以顺意.变量abcd,那方法名就是setAbcd和getAbcd.注意大小写.
jsp中的项目必然全部在form里面有所表示,当然反过来,form里的项目在jsp中不一定全部表示(可能有辅助动作的对象或验证)
SampleAction.java 
  public ActionForward start(ActionMapping mapping,
  ActionForm argForm, HttpServletRequest req, HttpServletResponse res)
  throws Exception {
        SampleForm form = (SampleForm) argForm;
        String name = ………………other codes for get name from db
        // set name
        form.setName(name);
        // now text will show the name
  }
public ActionForward save(ActionMapping mapping,
  ActionForm argForm, HttpServletRequest req, HttpServletResponse res)
        throws Exception {
        SampleForm form = (SampleForm) argForm;
        // get name
        String name = form.getName();
        ………………other codes for save name
  }
jsp和form对应,action操作form,form其实起了传输数据的作用.这就是struts标签的核心原理.得到数据和设置数据没问题了,剩下的工作也就得心应手了.

②再看一个处理标签的方法.画面上是一个明细一览表示(表).表示的是数据表user的相关数据(id,name).
SampleJsp: 
  <logic:present name="sampleForm" property="userList" >
    <logic:iterate id="user" name=" sampleForm " property="userList">
      <tr>
        <td><bean:write name="user" property="id" /></td>
        <td><bean:write name="user" property="name" /></td>
      </tr>
    </logic:iterate> 
  </logic:present>

logic:present是逻辑判断,sampleForm中userList为空(无数据或null),下面的东东不显示.
logic:iterate是逻辑循环,userList有几条数据,就循环几次.

<bean:write name="user" property="id" />是lable标签,显示user这个对象(entity)的id属性.或者说显示数据表user中的一条记录中的id这个列.
User.java(就是entity,因为和业务密切,高达不开发,切记切记不可顺意修改.遇到设计有问题,QA日本)
    String id;
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    String name;
    public String getName () { return name; }
    public void setName (String name) { this.name = name; }
看到这,是否觉得面熟啊,好象和FORM一样,但有点不一样,不一样在哪里,看下去后,自己感悟吧.
SampleForm.java: 
    List userList;
    public List getUserList () { return userList; }
    public void setUserList (List userList) { this.userList = userList; }
form只要这些,那你会问,id和name,struts如何能得到呢?你不是说过jsp必须和form一样对应吗?不错,一一对应是肯定的. UserList信息已经包含了一切,还需要定义id和name吗?至于struts如何得到数据,那就看下面的action是如何处理的吧.
SampleAction.java 
public ActionForward start(ActionMapping mapping,
  ActionForm argForm, HttpServletRequest req, HttpServletResponse res)
        throws Exception {
        SampleForm form = (SampleForm) argForm;
        ArrayList userList = new ArrayList();
        User user = new User();
        user.setId(1);
        user.setName(“name1”);
        userList.add(user);

        User user = new User();
        user.setId(2);
        user.setName(“name2”); 
        userList.add(user);
        
        // set userList
        form.setUserList(userList);
        // now table will show
  }
一切搞定.是不是很简单,但估计你还是有点晕.你还是想问我,id和name到底是如何设置的?
Action设置了userList就够了,它包含够多的信息了. struts看见了你设置了userList.它就知道了这个list里面都user(entity),useruser(entity)里面不是有很多get,set方法吗?

再看下下面的东东.
<logic:iterate id="user" name=" sampleForm " property="userList">
<bean:write name="user" property="id" />
id=”user”,和name="user" 对应了,明白啥意思吗?.就象循环指明索引一样. property="id"就是要显示的这个索引对应的内容.Struts就是这样来认id和name的.

③接下来,看一个加强版的table例子,在显示的明细一览,每一行前面加一个radio框,让用户选择哪个user.进行删除操作.
SampleJsp: 
  <logic:present name="sampleForm" property="userList" >
  <logic:iterate id="user" name=" sampleForm " property="userList">
  <tr>
    <td>
  <html:radio name="sampleForm" property="selectedUserId" value="<%=((jp.co.mhcb.obs.persis.entity.User)pageContext.getAttribute("user ")).getId().toString() %>" />
   </td>
   <td><bean:write name="user" property="id" /></td>
   <td><bean:write name="user" property="name" /></td>
  </tr>
</logic:iterate> 
</logic:present>

sampleForm.java:
    String selectedUserId; 
    public String getSelectedUserId () { return selectedUserId; }
    public void setSelectedUserId(String selectedUserId) {
        this.selectedUserId = selectedUserId;
    }
SampleAction.java 
public ActionForward delete(ActionMapping mapping,
  ActionForm argForm, HttpServletRequest req, HttpServletResponse res)
        throws Exception {
        SampleForm form = (SampleForm) argForm;
        String selectedUserId = form.getSelectedUserId();
        // get user by selected id
        User user = getUser(selectedUserId);
        // delete user
        }
radio框. propertys值对应form里的对象.value值是该行radio对应的user中的id(数据表中user的id是主键),那么当用户选中任何一个radio,struts通过form得到propertys值,就可以得到选中哪个user了,然后进行相应操作.
设置哪个user被选中,一是通过用户选择,没的说.二,通过程序控制,如果进入初期画面,我要让user.id = ‘3’的radio被选中,只要在初期Action中form.selectedUserId(“3”);一切搞定,就一句话,进入初期画面时, user.id = ‘3’的radio被选中了.

注意以下标签
<html:radio name="sampleForm" property="selectedUserId" value="<%= ((jp.co.mhcb.obs.persis.entity.User)pageContext.getAttribute("user ")).getId().toString() %>" />
下面发挥想象一下以下标签啥意思?
<html:radio name="sampleForm" property="selectedUserId" value="<%= ((jp.co.mhcb.obs.persis.entity.User)pageContext.getAttribute("user ")).getObject1().getObject1().getObject2()…………getObjectN().getId().toString() %>" />
能看出来什么?
User包含object1,object2包含object3,….objectN-1包含objectN,objectN有id属性.
看出来了吗?灵活运用,想象一下,各个entity和form,action该如何写?

④接着介绍一下,checkbox是使用.画面有一排checkbox,如何设置和得到数据呢?先看一个简单点的. 
 <html:checkbox name=" sampleForm" property="chechbox1" value="true" />
 <html:checkbox name=" sampleForm" property="chechbox2" value="false" />
 <html:checkbox name=" sampleForm" property="chechbox3" value="true" />
第二个框未选中,其他选中.form里面对应三个String chechbox1,chechbox2, chechbox3;下面来个复杂点的,多选择对话框multibox
SampleJsp中:
<logic:iterate name = "sampleForm" id="user" property="userList">
  <html:multibox property="selectedUsers">
    <bean:write name="user" property="id"/> 
  </html:multibox>
  <bean:write name="user" property="name"/> 
</logic:iterate>

SampleForm中:
    private String userList[] = new String[0]; 
    public String[] getUserList () { return userList;}
    public void setUserList(String[]userList) {this.userList = userList;}

    private String selectedUsers[] = new String[0];
    public String[] getSelectedUsers () {return selectedUsers;}
    public void setSelectedUsers (String[]selectedUsers) {this.selectedUsers = selectedUsers;}

如果我们在初期时在action里对bean赋值:
userList = { User(”1”,”name1”), User(”2”, ”name2”), User(”3”,”name3”) }
selectedUsers = {“1”,”3”}
那画面选中第一第三个选择框.

用户修改选择框,选择了第二,第三个,那么在action里取bean的值
String selectedItems[] = new String[list.getSize()];
selectedItems = form.getSelectedItems();
for ( int i = 0 ; i < selectedItems.length ; ++i ){
  LOGGER.debug( "selected " + i + ": " + selectedItems[i]);
}
Selected 0 : 2 
Selected 1 : 3
selectedUsers = {“2”,”3”}

⑤画面上有一user表,每条数据前面有个button,对应一条记录,如何确定选中那条数据呢??
SampleJsp:
<logic:iterate id="user" indexId="buttonIndex" name="sampleForm" property="userList">
<tr>
<td>
<html:submit property="button" indexed='false' >
<bean:message key="label.button.selectUser"/>
</td>
<td><bean:write name="user" property="id" /></td>
<td><bean:write name="user" property="name" /></td>
</tr>
<html:hidden name="sampleForm" property="selectUserIndex" value='<%= "" + buttonIndex %>'/>
</logic:iterate>

SampleAction.java
   int index = Integer.parseInt(form.getSelectUserIndex());
   通过一个隐藏变量,得到选中第几条数据,然后就能做相应处理.

⑥上面都是通过form和jsp传输数据的.还有session也能让jsp显示数据.但如果我做为设计者,是不提倡这样做的.为什么就不说了.但日本以前的设计很可能会用到session和jsp传数据.那我就有必要讲一下如何用了?做为高达的设计者还是尽量不要用session和jsp沟通.
有个下拉列表框,里面显示所有用户名称.用session传数据.
SampleJsp:
<%pageContext.setAttribute("userList",(List) (FwThreadContext
                .getAttribute("AllUser")));
%>
<html:select property="selectedUser"> 
  <html:options collection="userList" property="id" labelProperty="name" />
</html:select>

SampleForm.java:
    String selectedUser;
Form里只要一个selectedUser,表示选择的user. 下拉列表框用session表示.
在action等地方设置了session的内容,那下拉列表框就能显示内容了.这里session名为AllUser, labelProperty="name"是下拉列表框显示的东东, property="id"是下拉列表框每条数据隐藏的东东.通过property="selectedUser"里得到选中那条数据

<html:text name="sampleForm" property="name" 
value="<%= (FwThreadContext.getAttribute("UserName")).toString() %>" />
这里很简单就是把session名为UserName设置到Text框中.得的时候还是通过form中的name得到.


标签宝典:
1,lable
<bean:write name="sampleForm" property="name" />
2,text
<html:text name="sampleForm " property="name" />
3,button
<html:submit property="button">
<bean:message key="label.button.save" />
</html:submit>
<html:button property="button" onclick="javascript:openCalendar(date);">
<bean:message key="label.button.date" />
</html:button>
4,select 
<html:select property="selectedUser"> 
  <html:options name="sampleForm" collection="userList" property="id" labelProperty="name" />
</html:select>
5,checkbox,multibox
  <html:checkbox name="sampleForm" property="chechbox1" value="true" />
  
  <logic:iterate name = "sampleForm" id="user" property="userList">
    <html:multibox property="selectedUsers">
     <bean:write name="user" property="id"/> 
    </html:multibox>
    <bean:write name="user" property="name"/> 
  </logic:iterate>

6, 循环逻辑
<logic:present name="sampleForm" property="userList" >
<logic:iterate id="user" name=" sampleForm " property="userList">
<tr>
  <td>
  <html:radio name="sampleForm" property="selectedUserId" value="<%= ((jp.co.mhcb.obs.persis.entity.User)pageContext.getAttribute("user ")).getId().toString() %>" />
  </td>
  <td><bean:write name="user" property="id" /></td>
  <td><bean:write name="user" property="name" /></td>
</tr>
</logic:iterate> 
</logic:present>

7,if逻辑
<logic:equal name=" sampleForm " property="showAllFlg" value="true" >
  <html:submit property="button">
    <bean:message key="label.button.all"/>
  </html:submit>
</logic:equal>
<logic:equal name=" sampleForm " property=" showAllFlg " value="false" >
  <html:submit property="button">
    <bean:message key="label.button.noall"/>
  </html:submit>
</logic:equal>
分享到:
评论

相关推荐

    struts标签之浅入深出.htm

    学习struts标签实用工具

    struts2.0整合Struts 1

    在《Struts 2权威指南--基于WebWork核心的MVC开发》这本书中,作者李纲深入浅出地介绍了Struts 2的核心概念和实践技巧。这本书不仅适合初学者,也对有Struts 1背景的开发者提供了宝贵的指导。书中通过实例演示了如何...

    精通struts.基于MVC的.java.web设计与开发源码

    这本书深入浅出地讲解了Struts框架的核心概念、设计模式以及实际开发中的应用技巧。源代码作为书中的重要辅助材料,帮助读者更好地理解和实践书中所讲述的知识。 Struts是一个开源的Java Servlet MVC(Model-View-...

    struts入门(二)

    本篇文章将深入浅出地介绍 Struts 的基础知识,帮助初学者快速入门。 在 Struts 框架中,核心概念是 Controller,它通过 Action 类来处理用户的请求。Action 类是业务逻辑的载体,它接收来自 View(通常为 JSP 页面...

    Struts in Action 源代码

    Struts in Action 是一本经典书籍,它深入浅出地介绍了Apache Struts框架的使用和实践。Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它极大地简化了创建功能丰富的、交互式的Web...

    struts电子书1-8.rar

    总而言之,"struts电子书1-8.rar"是一个宝贵的资源,无论你是Java Web开发的新手还是想要复习Struts1的老手,都能从中获益匪浅。通过学习这个教程,你可以提升自己在Java Web开发中的技能,更好地理解和使用Struts1...

    Apress - Practical Apache Struts2 Web 2.0 Projects (Nov 2007)

    《实用Apache Struts2 Web 2.0项目》这本书旨在深入浅出地介绍如何利用Struts2框架创建功能丰富的Web 2.0应用。 首先,Struts2的核心特性之一是其强大的Action体系,它是处理用户请求的中心组件。通过定义Action类...

    深入浅出StrutsBookApps.rar

    这个名为"深入浅出StrutsBookApps"的压缩包很可能是为了介绍和讲解Struts框架的应用,以及如何深入理解和使用它来创建复杂的Web应用程序。下面我们将详细探讨Struts框架的核心概念和功能。 1. **MVC模式**:Struts...

    starting-struts2-chinese

    《Starting Struts2》一书由Ian Roughley撰写,李剑翻译,旨在深入浅出地介绍Struts2框架的基础知识与高级应用。本书不仅适合初学者快速入门,也为进阶开发者提供了丰富的实战经验和技巧。 #### 二、Struts2框架...

    Struts和Hibernate技术实现电子商务系统(电子书)

    此外,书中还介绍了Struts的模型组件类和标签库,帮助开发者快速上手并掌握Struts的高级用法。 **Hibernate:对象关系映射的利器** Hibernate作为一款流行的Java ORM(Object-Relational Mapping)框架,能够将...

    轻量级J2EE 企业应用实战 Struts+Spring+Hibernate整合开发

    本书是一本深入浅出讲解轻量级J2EE应用开发的著作,作者通过多年的实践经验总结了关于Struts、Hibernate、Spring三大开源框架的应用,并结合Tomcat与Jetty两个开源Web服务器的详细用法,为读者提供了丰富的实践经验...

    StrutsinAction中英对照

    JSP页面可以通过Struts标签库(如`&lt;s:property&gt;`,`&lt;s:form&gt;`等)与ActionForm和Action进行交互。 6. **Tiles**:Struts的一个扩展,提供了一种组织和重用页面布局的方法。它允许开发者创建可复用的页面组件,提高...

    计算机科学与技术

    7. **Struts标签库** - 讲解标签库的基本概念、html标签、bean标签和logic标签的使用方法。 - 难点在于熟练掌握几种标签的使用方式。 8. **Struts资源文件和错误处理** - 介绍资源文件的使用方法以及如何处理...

    Head First Servlets & JSP, Second Edition

    《Head First Servlets & JSP, Second Edition》是一本针对初学者的优秀教材,它深入浅出地介绍了Servlet和JSP这两个Java Web开发的核心技术。Servlet是Java平台上的服务器端编程接口,而JSP(JavaServer Pages)则...

    韩顺平 全套视频教程 java jee ssh spring php orace

    韩顺平是一位知名的IT教育专家,他的教程通常深入浅出,适合初学者和有一定基础的学习者。 【描述】"全套的视频自料 例子" 暗示这是一系列包含实战案例的视频教程,学习者可以通过观看实际操作来加深理解,这种方式...

    javaJDK数据库开发web开发

    王晓悦作为标签之一,可能是本书的作者或主要贡献者,他/她对Java技术和Web开发有深入的理解,并且能够将复杂的技术概念转化为易于理解的教学材料。 虽然没有提供具体的压缩包子文件的文件名称列表,但通常这些文件...

    jsp网络基础开发

    这本教程深入浅出地讲解了JSP的基础概念、语法以及实际应用,是初学者踏入网络编程领域的理想起点。 首先,JSP的基础部分包括JSP页面结构、指令和动作元素。JSP页面由静态内容(HTML、CSS、JavaScript)和动态内容...

    java 编程思想

    《Java编程思想》是一本深度剖析Java语言的经典之作,作者Bruce Eckel以其独特的视角和深入浅出的讲解,引领读者从基础语法到高级特性的全面理解。这本书不仅适合初学者,也深受经验丰富的开发者喜爱,因为书中包含...

    数据结构习题与解析(c语言篇) 李春葆

    标签中提到的"Struts2"是Java Web开发中的一个MVC框架,与数据结构直接关联不大,但在实际编程中,理解并掌握数据结构对于设计高效的应用程序和优化性能至关重要。 本书《数据结构习题与解析(C语言篇)》通过大量...

Global site tag (gtag.js) - Google Analytics