★☆

★☆
posts - 0, comments - 0, trackbacks - 0, articles - 80
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Struts2

Posted on 2008-08-14 12:44 阅读(191) 评论(0)  编辑  收藏 所属分类: struct2.0基础知识
Struts2基础知识:

  Struts2的相关配置文件

在struts2的web.xml部分配置文件如下所示:

<filter>

        <filter-name>struts2</filter-name>

        <filter-class>

            org.apache.struts2.dispatcher.FilterDispatcher

        </filter-class>

</filter>

    <filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

 </filter-mapping>

其中,org.apache.struts2.dispatcher.FilterDispatcher是一个过滤器,能够自动找到struts的配置文件,即struts.xml配置文件。所有*.action请求经过FilterDispatcher,在struts.xml中找到对应的action进行处理。

struts.xml配置文件中,部分代码编写如下:

<package name="cbsst" extends="struts-default">

        <interceptors>

            <interceptor name="CBSSTAuthorization"

                class="frame.interceptor.AuthorizationInterceptor" />

            <interceptor-stack name="CBSSTStack">

                <interceptor-ref name="exception" />

                <!-- interceptor-ref name="CBSSTAuthorization" /-->

                <interceptor-ref name="alias" />

                <interceptor-ref name="servletConfig" />

                <interceptor-ref name="prepare" />

                <interceptor-ref name="i18n" />

                <interceptor-ref name="chain" />

                <interceptor-ref name="debugging" />

                <interceptor-ref name="profiling" />

                <interceptor-ref name="scopedModelDriven" />

                <interceptor-ref name="modelDriven" />

                <interceptor-ref name="fileUpload" />

                <interceptor-ref name="checkbox" />

                <interceptor-ref name="staticParams" />

                <interceptor-ref name="params">

                    <param name="excludeParams">dojo"..*</param>

                </interceptor-ref>

                <interceptor-ref name="conversionError" />

                <interceptor-ref name="validation">

                    <param name="excludeMethods">

                        input,back,cancel,browse

                    </param>

                </interceptor-ref>

                <interceptor-ref name="workflow">

                    <param name="excludeMethods">

                        input,back,cancel,browse

                    </param>

                </interceptor-ref>

            </interceptor-stack>

        </interceptors>

        <default-interceptor-ref name="CBSSTStack" /></package>

<interceptors>标签下是一系列的拦截器,主要是拦截用户发送的请求。

<package>name属性指明一个包名称,"struts-default.xml"存在于struts-action-x.x.jar包中,用extends属性将其引入。

<include>标签表示引入一个文件,例如:<include file="struts_frame.xml" />

表示将struts_frame.xml文件引入到该文件当中。

<global-results>标签表示配置一个全局的action的返回结果,如下例:

<global-results>

    <result name="Error">/view/crm/common/Error.jsp</result>        <resultname="success">/view/crm/common/Success.jsp</result>    

</global-results>

表示配置两个全局的"Error"和"success",即所有的action都在其作用范围内,当一个action的返回结果是"Error",就会跳转到/view/crm/common/Error.jsp页面。

当然,这种全局的action的返回结果没有局部的action的返回结果的权利大。如果定义了一个局部的action,如下:

<action name="crm.project.ProjectAction.addSaveProject"

    method="addSaveProject" class="crm.action.project.ProjectAction">

        <result name="success" type="redirect-action">

         crm.project.ProjectAction.listProject</result>

    <result name=" Error">/view/crm/common/ErrorMessage.jsp

            </result>

</action>

如果此action的返回结果为" Error",页面会跳转到/view/crm/ErrorMessage.jsp

而不会跳转到全局的action返回结果中。name属性指明action的名称,class指明类的id(在spring配置文件中定义),method指明用类中的addSaveProject方法处理该action。<result>标签指明返回结果,上面的action有两个返回结果,"success"和" Error"。

   页面显示相关

 4.1 标签和文件的引入

1)引入struts的标签库

<%@ taglib prefix="s" uri="/struts-tags"%>

2)引入css式样表

<link rel="stylesheet" type="text/css" href="style/common/Main01.css">

3)引入js文件

 <script type="text/javascript" src="js/crm/project/addProject.js"></script>

4.2页面动态显示

1) radio被动态选中

<s:radio list="#{'1':'大','2':'中','3':'小'}" listKey="key"

 listValue="value" name="project.sizeId" value="${project.sizeId }"></s:radio>

实现了由action中传入一个project.sizeId的值,radio自动选中与之相匹配的项。

2) selsect中的option被动态选中

 <s:select list="#{'1':'PG','2':'SE','3':'TL','4':'SL','5':'PL','6':'PM'}

listKey="key"list Value="value"name="projectDeveloper"  value="${actor }" >

</s:select>

实现了由action中传入一个actor的值,option自动选中与之相匹配的项。

3) 多个复选框被动态选中

<s:checkboxlist name="technologyIds" list="technologys" listKey="technologyId" listValue="technologyName" value="technologyIds" />

实现了在链表st="technologys"中,如果有匹配数组value="technologyIds"中的值,则这些复选框被动态选中。

4.3 javascript在页面显示中的应用

1)数据校验

例如校验项目id:

首先,通过id得到对象

var projectId = document.getElementById("projectId");

其次,对数据进行校验,如果有错就给出提示,直到没有错,就提交表单。

if(i==0&&projectId.value=="")

 { i=1;

 alert("项目编号不能为空");

 }else f(i==0&&(projectId.value.length<4||projectId.value.length>25))

 { i=1;

   alert("项目编号长度必须在4到25之间");   

2)提交表单

经过数据校验,数据合格后,提交表单

if(i==0)

 {

    form.action = "crm.project.ProjectAction.addSaveProject.action";

    form.submit();

 }

3)向table中动态增加一行

实现相table中动态增加一行的功能,用到了innerHTML和innerText。

首先,通过id得到table对象

 var tab = document.getElementById("developer");

然后,插入新的一行到tab的第一行

var newTr0 = tab.insertRow(0);

其次,增加两列

var newTd0 = newTr0.insertCell();

var newTd1 = newTr0.insertCell();

最后,设置两列的属性

newTd0.innerText='开发人编号:';

newTd1.innerHTML ='<input type="text" name="projectDeveloper" >';


只有注册用户登录后才能发表评论。


网站导航: