Action 跟 Actionsupport 的区别.docx

上传人:b****4 文档编号:24206521 上传时间:2023-05-25 格式:DOCX 页数:19 大小:25.79KB
下载 相关 举报
Action 跟 Actionsupport 的区别.docx_第1页
第1页 / 共19页
Action 跟 Actionsupport 的区别.docx_第2页
第2页 / 共19页
Action 跟 Actionsupport 的区别.docx_第3页
第3页 / 共19页
Action 跟 Actionsupport 的区别.docx_第4页
第4页 / 共19页
Action 跟 Actionsupport 的区别.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

Action 跟 Actionsupport 的区别.docx

《Action 跟 Actionsupport 的区别.docx》由会员分享,可在线阅读,更多相关《Action 跟 Actionsupport 的区别.docx(19页珍藏版)》请在冰豆网上搜索。

Action 跟 Actionsupport 的区别.docx

Action跟Actionsupport的区别

Action跟Actionsupport的区别

当我们在写action的时候,可以实现Action接口,也可以继承Actionsupport这个类.到底这两个有什么区别呢?

Action接口有:

publicstaticfinaljava.lang.StringSUCCESS="success";

publicstaticfinaljava.lang.StringNONE="none";

publicstaticfinaljava.lang.StringERROR="error";

publicstaticfinaljava.lang.StringINPUT="input";

publicstaticfinaljava.lang.StringLOGIN="login";

publicabstractjava.lang.Stringexecute()throwsjava.lang.Exception

而Actionsupport这个工具类在实现了Action接口的基础上还定义了一个validate()方法,重写该方法,它会在execute()方法之前执行,如校验失败,会转入input处,必须在配置该Action时配置input属性。

另外,Actionsupport还提供了一个getText(Stringkey)方法还实现国际化,该方法从资源文件上获取国际化信息.

这样在自定义标签时可以定义一个变量为newactionsupport对象实现国际化

ActionSupport类的作用

struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的publicStringexecute()throwsException方法。

因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。

Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法

==========================

property>

关于struts2标签取值的备忘录

取值要通过

propertyvalue=""/>或在任意的

/>标签内使用%{};

当Action的valueStack中有该属性的值时,只需直接使用该属性的名字即可

当Action的valueStack中没有该属性的值时,比如在session,application范围中的属性值时,需要加#或者#attr.;

例子:

假设某Action中有person成员变量,在application中存在company属性

那么我们可以通过以下方法取值:

propertyvalue="person.name"/>

propertyvalue="#person.name"/>

propertyvalue="company.name"/>//无法取到,因为company不在action的valueStack中

propertyvalue="#company.name"/>

textfieldname="person.name"value="person.name"/>//错误,value会直接显示person.name字样

textfieldname="person.name"value="%{person.name}"/>

textfieldname="pany.name"value="%{#company.name}"/>

textfieldname="pany.name"value="%{#pany.name}"/>

=====================

一次Action调用都会创建一个ActionContext

调用:

ActionContextcontext=ActionContext.getContext()

ValueStack由OGNL框架实现

可以把它简单的看作一个集合

StackObject:

放入stack中的对象,一般是action

StackContext(map):

stack上下文,它包含一些列对象,包括request/session/attr/applicationmap等。

EL:

存取对象的任意属性,调用对象的方法,遍历整个对象结…

===========

WebWork2.2笔记

(二)ActionSupport及其他基础知识

绝大多数情况下,WebWork不是直接实现com.opensymphony.xwork.Action接口,而是扩展com.opensymphony.xwork.ActionSupport类。

ActionSupport实现了除Action以外的其他几个接口,主要的几个接口是:

com.opensymphony.xwork.Validateable

com.opensymphony.xwork.Validateaware

com.opensymphony.xwork.TextProvider

com.opensymphony.xwork.LocaleProvider

这些接口主要是提供给WebWork的拦截器使用的,接口配合拦截器可以实现AOP功能。

比如Validateable接口和Validateaware接口配合DefailtWorkflowInterceptor就可以实现对用户输入进行检验的功能,当用户调用Action时,首先执行Validateable接口定义的validate()方法,如果在这个方法中用户使用接口Validateaware中的方法设置了错误信息,则DefaultWorkflowInterceptor会自动终止Action的执行,并产生一个INPUT的result,只有没有任何错误信息才会执行Action的剩余部分。

前面我们定义的xwork.xml配置文件中包含了一句:

,这个webwork-default.xml包含在webwork的jar包中。

webwork-default.xml预建了很多常用的result-type、interceptor和interceptor-stack。

其中interceptor和interceptor-stack用于定义webwork将要使用那些拦截器。

interceptor定义一个拦截器,而interceptor定义一组拦截器。

如果一个Action使用一组拦截器,则这些拦截器将以其定义的顺序执行,可见,interceptor-stack中拦截器的顺序时很重要的。

在webwork-default.xml中有如下定义:

......

而名为validationWorkflowStack和completeStack这两个预建的interceptor-stack则包含了workflow这个interceptor。

下面做一个检查用户输入的练习,如果用户没有输入内容,则让用户重新输入,并且提示错误信息。

web.xml

与上次的相同。

xwork.xml

xml代码

1.

2."

3.

4.

5.

6.

7.

8.

9.

10.

11.success.jspresult>

12.input.jspresult>

13.action>

14.

15.package>

16.xwork>

input.jsp

xml代码

1.<%@taglibprefix="ww"uri="/webwork"%>

2.

3.InputSomethingtitle>head></p><p>4.<body></p><p>5.</p><p>6.<ww:</p><p>formaction="alidateInput.action"></p><p>7.<ww:</p><p>textfieldlabel="Inputsomething:</p><p>"name="something">ww:</p><p>textfield></p><p>8.<ww:</p><p>submit>ww:</p><p>submit></p><p>9.ww:</p><p>form></p><p>10.</p><p>11.body></p><p>12.html></p><p>success.jsp</p><p>xml代码</p><p>1.<%@taglibprefix="ww"uri="/webwork"%></p><p>2.<html></p><p>3.<head><title>Success!</p><p>title>head></p><p>4.<body></p><p>5.<ww:</p><p>propertyvalue="something"/></p><p>6.body></p><p>7.html></p><p>==============================</p><p>Action的实例,总是放到valuestack中。</p><p>因为Action放在stack中,而stack是root(根对象),所以对Action中的属性的访问就可以省略#标记。</p><p>但是,要访问ActionContext中其它对象的属性,就必须要带上#标记,以便让OGNL知道,不是从根对象,而是从其它对象中去寻找。</p><p>Struts2中OGNL,valueStack,stackContext的学习</p><p>学习Struts2,一直不明白表单中的值是怎么传给Action的,上网查了些资料,基本了解了!</p><p>下面基本是从几个人的BOLG转载过来,以后记不清了再来看~</p><p>[color=red]先看看我做的实验jsp页面</p><p>Java代码</p><p><s:</p><p>formaction="hello/converter.action"method="post"></p><p><s:</p><p>textfieldname="point"label="点"></s:</p><p>textfield></p><p><s:</p><p>textfieldname="point2"label="2"></s:</p><p>textfield></p><p><s:</p><p>textfieldname="point3"label="3"></s:</p><p>textfield></p><p><s:</p><p>textfieldname="age"label="年龄"></s:</p><p>textfield></p><p><s:</p><p>textfieldname="date"label="日期"></s:</p><p>textfield></p><p><s:</p><p>submitname="提交"></s:</p><p>submit></p><p></s:</p><p>form></p><p>结果图(是通过<s:</p><p>debug></s:</p><p>debug>得到的)</p><p>valuestack:</p><p>Stackcontext:</p><p>通过图中我们可以看到</p><p>valuestack中包括我传递的值(point,point2,point3,age,date)</p><p>stackcontext中包括了requestapplicationOgnlValueStack(root)sessionparameters等属性</p><p>值栈(ValueStack)    </p><p>Struts2将OGNL上下文设置为Struts2中的ActionContext(内部使用的仍然是OgnlContext),并将值栈设为OGNL的根对象。</p><p>    </p><p>我们知道,OGNL上下文中的根对象可以直接访问,不需要使用任何特殊的“标记”,而引用上下文中的其他对象则需要使用“#”来标记。</p><p>由于值栈是上下文中的根对象,因此可以直接访问。</p><p>那么对于值栈中的对象该如何访问呢?</p><p>Struts2提供了一个特殊的OGNLPropertyAccessor,它可以自动查找栈内的所有对象(从栈顶到栈底),直接找到一个具有你所查找的属性的对象。</p><p>也就是说,对于值栈中的任何对象都可以直接访问,而不需要使用“#”。</p><p>    </p><p>假设值栈中有两个对象:</p><p>student和employee,两个对象都有name属性,student有学号属性number,而employee有薪水属性salary。</p><p>employee先入栈,student后入栈,位于栈顶,那么对于表达式name,访问的就是student的name属性,因为student对象位于栈顶;表达式salary,访问的就是employee的salary属性。</p><p>正如你所见,访问值栈中的对象属性或方法,无须指明对象,也不用“#”,就好像值栈中的对象都是OGNL上下文中的根对象一样。</p><p>这就是Struts2在OGNL基础上做出的改进。</p><p>值栈中的Action实例  </p><p>Struts2框架总是把Action实例放在栈顶。</p><p>因为Action在值栈中,而值栈又是OGNL中的根,所以引用Action的属性可以省略“#”标记,这也是为什么我们在结果页面中可以直接访问Action的属性的原因。</p><p>Struts2中的命名对象    </p><p>Struts2还提供了一些命名对象,这些对象没有保存在值栈中,而是保存在ActionContext中,因此访问这些对象需要使用“#”标记。</p><p>这些命名对象都是Map类型。</p><p>   </p><p>parameters    </p><p>用于访问请求参数。</p><p>如:</p><p>#parameters['id']或#parameters.id,相当于调用了HttpServletRequest对象的getParameter()方法。</p><p>    </p><p>注意,parameters本质上是一个使用HttpServletRequest对象中的请求参数构造的Map对象,一量对象被创建(在调用Action实例之前就已经创建好了),它和HttpServletRequest对象就没有了任何关系。</p><p> </p><p>request    </p><p>用于访问请求属性。</p><p>如:</p><p>#request['user']或#request.user,相当于调用了HttpServletRequest对象的getAttribute()方法。</p><p>   </p><p>session    </p><p>用于访问session属性。</p><p>如:</p><p>#session['user']或#session.user,相当于调用了HttpSession对象的getAttribute()方法。</p><p>   </p><p>application    </p><p>用于访问application属性。</p><p>如:</p><p>#application['user']或#application.user,相当于调用了ServletContext的getAttribute()方法。</p><p>   </p><p>attr    </p><p>如果PageContext可用,则访问PageContext,否则依次搜索request、session和application对象。</p><p>以下是转过来的:</p><p>先分清楚下ActionContext、ValueStack、StackContext三者</p><p>ActionContext</p><p>一次Action调用都会创建一个ActionContext</p><p>调用:</p><p>ActionContextcontext=ActionContext.getContext()</p><p>ValueStack</p><p>由OGNL框架实现</p><p>可以把它简单的看作一个栈(List)。</p><p>StackObject:</p><p>放入stack中的对象,一般是action。</p><p>StackContext(map):</p><p>stack上下文,它包含一系列对象,包括request/session/attr/applicationmap等。</p><p>EL:</p><p>存取对象的任意属性,调用对象的方法,遍历整个对象结…</p><p>ActionContext是Action上下文,可以得到requestsessionapplication</p><p>ValueStack是值栈存放表单中的值</p><p>StackContext栈上下文也是用来存值的</p><p>struts2对OGNL上下文的概念又做了进一步扩充,在struts2中,OGNL上下文通常如下所示:</p><p>|--request</p><p>|</p><p>|--application</p><p>|</p><p>contextmap---|--OgnlValueStack(root)[user,action,OgnlUtil,...]</p><p>|</p><p>|--session</p><p>|</p><p>|--attr</p><p>|</p><p>|--parameters</p><p>在Struts2中,采用标准命名的上下文(Context)来处理OGNL表达式。</p><p>处理OGNL的顶级对象是一个Map(也叫contextmap),而OGNL在这个context中就是一个顶级对象(root)。</p><p>在用法上,顶级对象的属性访问,是不需要任何标记前缀的。</p><p>而其它非顶级的对象访问,需要使用#标记。</p><p>Struts2框架把OGNLContext设置为我们的ActionContext。</p><p>并且ValueStack作为OGNL的根对象。</p><p>除valuestack之外,Struts2框架还把代表application、session、request这些对象的Map对象也放到ActionContext中去。</p><p>(这也就是Struts2建议在Action类中不要直接访问ServletAPI的原因,他可以通过ActionContext对象来部分代替这些(ServletAPI)功能,以方便对Action类进行测试!</p><p>)</p><p>Action的实例,总是放到valuestack中。</p><p>因为Action放在stack中,而stack是root(根对象),所以对Action中的属性的访问就可以省略#标记。</p><p>但是,要访问ActionContext中其它对象的属性,就必须要带上#标记,以便让OGNL知道,不是从根对象,而是从其它对象中去寻找。</p><p>那么访问Action中的属性的代码就可以这样写</p><p><s:</p><p>propertyvalue="postalCode"/></p><p>其它ActionContext中的非根对象属性的访问要像下面这样写:</p><p><s:</p><p>propertyvalue="#session.mySessionPropKey"/>or</p><p><s:</p><p>propertyvalue="#session['mySessionPropKey']"/>or</p><p><s:</p><p>propertyvalue="#request['myRequestPropKey']"/></p><p>对Collection的处理,内容就很简单。</p><p><s:</p><p>selectlabel="label"name="name"list="{'name1','name2','name3'}"value="%{'name2'}"/></p><p>这是处理List。</p><p>这个代码在页面上建立一个下拉选项,内容是list中的内容,默认值是name2.</p><p>处理map</p><p><s:</p><p>selectlabel="label"name="name"list="#{'foo':</p><p>'foovalue','bar':</p><p>'barvalue'}"/></p><p>需要注意的是,判断一个值是否在collection中。</p><p>我们要使用in或者notin来处理。</p><p><s:</p><p>iftest="'foo'in{'foo','bar'}"></p><p>muhahaha</p><p></s:</p><p>if></p><p><s:</p><p>else></p><p>boo</p><p></s:</p><p>else></p><p>另外,可以使用通配符来选择collection对象的子集。</p><p>?</p><p>——所有匹配选择逻辑的元素</p><p>^——只提取符合选择逻辑的第一个元素</p><p>$——只提取符合选择逻辑的最后一个元素</p><p>person.relatives.{?</p><p>#this.gender=='male'}</p><p>`````````````````````````````````````````````````````````````````````````````````</p><p>以下为补充摘录的一些问题:</p><p>提问:</p><p>在Struts2中,如何使用自身的Tag读取Action中的变量?</p><p>Struts2自身的Tag会根据value中的OGNL表达式,在ValueStack中寻找相应的对象。</p><p>因为action在ValueStack的顶部,所以默认情况下,Struts2的Tag中的OGNL表达式将查找action中的变量。</p><p>请注意,value中的内容直接是OGNL表达式,无需任何el的标签包装。</p><p>例如:</p><p><s:</p><p>propertyvalue="user.name"/></p><p>提问:</p><p>在Struts2中,如何使用自身的Tag读取HttpServletRequest,HttpSession中的变量?</p><p>在上面的知识中,我们知道,Struts2中OGNL的上下文环境中,包含request,session,application等servlet对象的Map封装。</p><p>既然这些对象都在OGNL的上下文中,那么根据OGNL的基本知识,我们可以通过在表达式前面加上#符号来对这些变量的值进行访问。</p><p>例如:</p><p><s:</p><p>propertyvalue="%{#application.myApplicationAttribute}"/></p><p><s:</p><p>propertyvalue="%{#session.mySessionAttribute}"/></p><p><s:</p><p>propertyvalue="%{#request.myRequestAttribute}"/></p><p><s:</p><p>propertyvalue="%{#parameters.myParameter}"/></p><p>提问:</p><p>在Struts2中,如何使用JSTL来读取Action中的变量?</p><p>这是一个历史悠久的问题。</p><p>因为事实上,很多朋友(包括我在内)是不使用Struts2自身的标签库,而是使用JSTL的,可能因为JSTL标签库比较少,简单易用的原因吧。</p><p>我们知道,JSTL默认是从page,request,session,application这四个Scope逐次查找相应的EL表达式所对应的对象的值。</p><p>那么如果要使用JSTL来读取Action中的变量,就需要把Action中的变量,放到request域中才行。</p><p>所以,早在Webwork2.1.X的年代,我们会编写一个拦截器来做这个事情的。</p><p>大致的原理是:</p><p>在Action执行完返回之前,依次读取Action中的所有的变量,并依次调用reque</p> </div> <div class="readmore" onclick="showmore()" style="background-color:transparent; height:auto; margin:0px 0px; padding:20px 0px 0px 0px;"><span class="btn-readmore" style="background-color:transparent;"><em style=" font-style:normal">展开</em>阅读全文<i></i></span></div> <script> function showmore() { $(".readmore").hide(); $(".detail-article").css({ "height":"auto", "overflow": "hidden" }); } $(document).ready(function() { var dh = $(".detail-article").height(); if(dh >100) { $(".detail-article").css({ "height":"100px", "overflow": "hidden" }); } else { $(".readmore").hide(); } }); </script> </div> <script> var defaultShowPage = parseInt("5"); var id = "24206521"; var total_page = "19"; var mfull = false; var mshow = false; function DownLoad() { window.location.href='https://m.bdocx.com/down/24206521.html'; } function relate() { var reltop = $('#relate').offset().top-50; $("html,body").animate({ scrollTop: reltop }, 500); } </script> <script> var pre = "https://file1.bdocx.com/fileroot1/2023-5/25/d9449d30-9486-4a40-a703-ebacb9640c3f/d9449d30-9486-4a40-a703-ebacb9640c3f"; var freepage = parseInt('19'); var total_c = parseInt('19'); var start = defaultShowPage; var adcount = 0; var adindex = 0; var adType_list = ";0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;"; var end = start; function ShowSvg() { end = start + defaultShowPage; if (end > freepage) end = freepage; for (var i = start; i < end; i++) { var imgurl = pre + (i + 1) + '.gif'; var html = "<img src='" + imgurl + "' onerror=\"this.src='/images/s.gif'\" alt=\"Action 跟 Actionsupport 的区别.docx_第" + (i + 1) + "页\" width='100%'/>"; $("#page").append("<div class='page'>" + html + "</div>"); $("#page").append("<div class='pageSize'>第" + (i + 1) + "页 / 共" + total_c + "页</div>"); if(adcount > 0 && adType_list.indexOf(";"+(i+1)+";")>-1) { if(adindex > (adcount-1)) adindex = 0; $("#page").append("<div class='pagead' id='addiv"+(i + 1)+"'></div>"); document.getElementById("addiv"+(i + 1)+"").innerHTML =document.getElementById("adpre" + adindex).outerHTML; adindex += 1; } } start = end; if (start > (freepage - 1)) { if (start < total_c) { $("#pageMore").removeClass("btnmore"); $("#pageMore").html("亲,该文档总共" + total_c + "页,到这儿已超出免费预览范围,如果喜欢就下载吧!"); } else { $("#pageMore").removeClass("btnmore"); $("#pageMore").html("亲,该文档总共" + total_c + "页全部预览完了,如果喜欢就下载吧!"); } } } //$(document).ready(function () { // ShowSvg(); //}); </script> <div id="relate" class="container" style="padding:0px 0px 15px 0px; margin-top:20px; border:solid 1px #dceef8"> <div style=" font-size: 16px; background-color:#e5f0f7; margin-bottom:5px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px;">相关资源</div> <div id="relatelist" style="padding-left:5px;"> <ul> <li><em class="xls"/></em><a target="_parent" href="https://m.bdocx.com/doc/30866042.html" title="质量控制计划表格范例.xls">质量控制计划表格范例.xls</a> </li><li><em class="xls"/></em><a target="_parent" href="https://m.bdocx.com/doc/30866041.html" title="陈会昌气质量表-含性格分析-.xls">陈会昌气质量表-含性格分析-.xls</a> </li><li><em class="xlsx"/></em><a target="_parent" href="https://m.bdocx.com/doc/30866040.html" title="长租公寓测算表【经营测算1年、10年含公式和示例】.xlsx">长租公寓测算表【经营测算1年、10年含公式和示例】.xlsx</a> </li><li><em class="xls"/></em><a target="_parent" href="https://m.bdocx.com/doc/30866039.html" title="高效导热材料介绍.xls">高效导热材料介绍.xls</a> </li><li><em class="xls"/></em><a target="_parent" href="https://m.bdocx.com/doc/30866038.html" title="管道开挖回填基础工程量计算表.xls">管道开挖回填基础工程量计算表.xls</a> </li><li><em class="docx"/></em><a target="_parent" href="https://m.bdocx.com/doc/30866037.html" title="2023年监理工程师延续注册必修课48学时试卷及答案.docx">2023年监理工程师延续注册必修课48学时试卷及答案.docx</a> </li><li><em class="doc"/></em><a target="_parent" href="https://m.bdocx.com/doc/30866036.html" title="(美)麦克米兰公司英语900句183;基础篇.doc">(美)麦克米兰公司英语900句183;基础篇.doc</a> </li><li><em class="xls"/></em><a target="_parent" href="https://m.bdocx.com/doc/30866035.html" title="习题7-1.xls">习题7-1.xls</a> </li><li><em class="xlsx"/></em><a target="_parent" href="https://m.bdocx.com/doc/30866034.html" title="用Excel编写公式模板计算医学决定水平处的偏倚.xlsx">用Excel编写公式模板计算医学决定水平处的偏倚.xlsx</a> </li><li><em class="xls"/></em><a target="_parent" href="https://m.bdocx.com/doc/30866033.html" title="烧结机产量和原料计算表.xls">烧结机产量和原料计算表.xls</a> </li> </ul> </div> </div> <div class="container" style="padding:0px 0px 15px 0px; margin-top:20px; border:solid 1px #dceef8"> <div style=" font-size: 16px; background-color:#e5f0f7; margin-bottom:5px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px;">猜你喜欢</div> <div id="relatelist" style="padding-left:5px;"> <ul> <li><em class="docx"></em> <a href="https://m.bdocx.com/doc/1116820.html" target="_parent" title="C语言通讯录管理系统程序设计.docx">C语言通讯录管理系统程序设计.docx</a></li> <li><em class="docx"></em> <a href="https://m.bdocx.com/doc/1116821.html" target="_parent" title="材料科学基础张代东习题答案.docx">材料科学基础张代东习题答案.docx</a></li> <li><em class="docx"></em> <a href="https://m.bdocx.com/doc/1116822.html" target="_parent" title="ET200SP基座单元BaseUnit使用入门要点.docx">ET200SP基座单元BaseUnit使用入门要点.docx</a></li> <li><em class="doc"></em> <a href="https://m.bdocx.com/doc/1116823.html" target="_parent" title="连锁店长在店铺管理中的几个重点.doc">连锁店长在店铺管理中的几个重点.doc</a></li> <li><em class="docx"></em> <a href="https://m.bdocx.com/doc/1116824.html" target="_parent" title="高中语文人教版必修三第3单元 10 过秦论 学业分层测评含答案.docx">高中语文人教版必修三第3单元 10 过秦论 学业分层测评含答案.docx</a></li> <li><em class="docx"></em> <a href="https://m.bdocx.com/doc/1116825.html" target="_parent" title="最新台湾大学的通识教育考察报告 精品.docx">最新台湾大学的通识教育考察报告 精品.docx</a></li> <li><em class="docx"></em> <a href="https://m.bdocx.com/doc/1116826.html" target="_parent" title="电大《医用基础化学》形成性考核册作业答案.docx">电大《医用基础化学》形成性考核册作业答案.docx</a></li> <li><em class="docx"></em> <a href="https://m.bdocx.com/doc/1116827.html" target="_parent" title="党性分析剖析材料.docx">党性分析剖析材料.docx</a></li> <li><em class="docx"></em> <a href="https://m.bdocx.com/doc/1116828.html" target="_parent" title="道路运输管理工作规范驾驶员培训管理部分概要.docx">道路运输管理工作规范驾驶员培训管理部分概要.docx</a></li> </ul> </div> </div> <div style=" font-size: 16px; background-color:#e5f0f7; margin-top:20px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px; margin-bottom:10px;"> 相关搜索</div> <div class="widget-box pt0" style="border: none; padding:0px 5px;"> <ul class="taglist--inline multi"> <li class="tagPopup"><a target="_parent" class="tag tagsearch" rel="nofollow" href="https://m.bdocx.com/search.html?q=Action">Action</a></li> <li class="tagPopup"><a target="_parent" class="tag tagsearch" rel="nofollow" href="https://m.bdocx.com/search.html?q=Actionsupport">Actionsupport</a></li> <li class="tagPopup"><a target="_parent" class="tag tagsearch" rel="nofollow" href="https://m.bdocx.com/search.html?q=%e7%9a%84%e5%8c%ba%e5%88%ab">的区别</a></li> <li class="tagPopup"><a target="_parent" class="tag tagsearch" rel="nofollow" href="https://m.bdocx.com/search.html?q=%e5%8c%ba%e5%88%ab">区别</a></li> </ul> </div> <br /> <div > 当前位置:<a target="_parent" href="https://m.bdocx.com/">首页</a> > <a href="https://m.bdocx.com/booklist-00009.html">求职职场</a><span> > </span><a href="https://m.bdocx.com/booklist-0000900001.html">简历</a> </div> <br /> <div class="cssnone"> <iframe title="来源" src="https://m.bdocx.com/BookRead.aspx?id=zfVG0Iy%2fW5Rlu71eARyrJw%3d%3d&parto=WO6f5sWvLGLIuJNN7BaH3doGsyMOGLUA2xFx%2fTAjCVlyFQN9%2f%2fJ7D7a89btDljracpbYNA4jpTUuob7OmOwbkqP7aKRkguA%2bYcVUo%2bLtYS9FNUDKrIqY8Nz0Izf6%2bbqtPB6jYFtAe1VpZxfnLBxA9vRBcutYBInyL3S%2fUnmUyd%2f1C5vGH57Wm%2f%2bUmVv%2bH%2bh9%2biqtvwetwZ%2f99wFI6LAf2zIz4jw2oDZe" frameborder="0" style="width: 0px; height: 0px"> </iframe> </div> <span id="LabelScript"></span> <script src="https://mstatic.bdocx.com/JS/bootstrap-collapse.js"></script> </form> <div class="siteInner_bg" style="margin-top: 40px; border: solid 0px red; margin-left: 0px; margin-right: 0px;"> <div class="siteInner"> <p style="text-align: center;">copyright@ 2008-2022 冰豆网网站版权所有</p><p style="text-align: center;">经营许可证编号:<a href="http://beian.miit.gov.cn/" target="_blank">鄂ICP备2022015515号-1</a></p><script>var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?2e77bd3f6fe91b0e21d3f22267249ee3"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();</script><script>(function(){ var el = document.createElement("script"); el.src = "https://lf1-cdn-tos.bytegoofy.com/goofy/ttzz/push.js?81476e42bf626128cf29544ee216a8ed7deb9487dce7ed62313212129c4244a219d1c501ebd3301f5e2290626f5b53d078c8250527fa0dfd9783a026ff3cf719"; el.id = "ttzz"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(el, s); })(window)</script> </div> </div> <div class="trnav clearfix" id="navcontent" style="display: none; background-color:#3a71b1; "> <div class="trlogoside" id="navlogo" style="display: none;"> <a href="https://m.bdocx.com/" title="冰豆网"><img src="https://www.bdocx.com/images/logo_bd.png" alt="冰豆网"></a> <div class="trnavclose" id="navclose"> <span></span> </div> </div> <div class="navcontainer"> <div class="row"> <ul class="nav navbar-nav trnavul headercontent" id="navigation" style="margin:20px 0 0px;"> <li><a target="_parent"href="https://m.bdocx.com/login.aspx">登录</a></li> <li><a target="_parent"href="https://m.bdocx.com/">首页 </a></li> <li><a target="_parent"href="https://m.bdocx.com/booklist-0.html">资源分类 </a></li> <li><a target="_parent"href="https://m.bdocx.com/UserManage/Recharge.aspx?f=0"><img src="https://m.bdocx.com/images/s.gif" alt="new" class="hottip1">升级会员 <img src="https://www.bdocx.com/FileUpload/Images/48520fea-bc98-41ae-b183-84689c7075c9.gif" alt="new" class="hottip"></a></li> <li><a target="_parent"href="https://m.bdocx.com/newslist.html">通知公告 </a></li> <li><a target="_parent"href="https://m.bdocx.com/h-0.html">帮助中心 </a></li> </ul> </div> </div> </div> <script type="text/javascript"> function stopPropagation(e) { var ev = e || window.event; if (ev.stopPropagation) { ev.stopPropagation(); } else if (window.event) { window.event.cancelBubble = true;//兼容IE } } $("#navmore").click(function (e) { $("#navcontent").show(); $("#navlogo").show(); stopPropagation(e); var navcontentwidth = $("#navcontent").width(); $('#navcontent').css({ 'right': '-' + navcontentwidth + 'px' }); $("#navcontent").show().animate({ "right": 0 }, 300); }); $(document).bind('click', function () { var navcontentwidth = $("#navcontent").width(); $("#navcontent").animate({ 'right': '-' + navcontentwidth + 'px' }, 300, function () { $("#navcontent").hide(); }); $("#navlogo").fadeOut(300); }); $("#navcontent").click(function (e) { stopPropagation(e); }); $("#navclose").click(function (e) { var navcontentwidth = $("#navcontent").width(); $("#navcontent").animate({ 'right': '-' + navcontentwidth + 'px' }, 300, function () { $("#navcontent").hide(); }); $("#navlogo").fadeOut(300); }); </script> <script> function BaseShare(title, desc, imgUrl) { var link = "https://m.bdocx.com/doc/24206521.html"; if (wx) { wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: 'wx4f717640abfd1120', // 必填,公众号的唯一标识 timestamp: '1725752015', // 必填,生成签名的时间戳 nonceStr: '28DD2C7955CE926456240B2FF0100BDE', // 必填,生成签名的随机串 signature: '235d6dab1a880b08779c84f047bc0f4813ab41d9',// 必填,签名,见附录1 jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline', 'updateAppMessageShareData', 'updateTimelineShareData', 'hideMenuItems'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 //openTagList: ["wx-open-launch-weapp"]//H5打开小程序 }); wx.ready(function () { //需在用户可能点击分享按钮前就先调用 wx.hideMenuItems({// 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3 menuList: ['menuItem:share:qq', 'menuItem:favorite', 'menuItem:share:QZone', 'menuItem:share:email', 'menuItem:originPage', 'menuItem:readMode', 'menuItem:delete', 'menuItem:editTag', 'menuItem:share:facebook', 'menuItem:share:weiboApp', 'menuItem:share:brand'] }); var shareData = { title: title, // 分享标题 desc: desc,//这里请特别注意是要去除html link: link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: imgUrl, // 分享图标 }; wx.updateAppMessageShareData(shareData);//1.4 分享到朋友 wx.updateTimelineShareData(shareData);//1.4分享到朋友圈 }); } } function BaseShare(title, desc, imgUrl, link) { if (link=="") link = "https://m.bdocx.com/doc/24206521.html"; if (wx) { wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: 'wx4f717640abfd1120', // 必填,公众号的唯一标识 timestamp: '1725752015', // 必填,生成签名的时间戳 nonceStr: '28DD2C7955CE926456240B2FF0100BDE', // 必填,生成签名的随机串 signature: '235d6dab1a880b08779c84f047bc0f4813ab41d9',// 必填,签名,见附录1 jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline', 'updateAppMessageShareData', 'updateTimelineShareData', 'hideMenuItems'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 //openTagList: ["wx-open-launch-weapp"]//H5打开小程序 }); wx.ready(function () { //需在用户可能点击分享按钮前就先调用 wx.hideMenuItems({// 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3 menuList: ['menuItem:share:qq', 'menuItem:favorite', 'menuItem:share:QZone', 'menuItem:share:email', 'menuItem:originPage', 'menuItem:readMode', 'menuItem:delete', 'menuItem:editTag', 'menuItem:share:facebook', 'menuItem:share:weiboApp', 'menuItem:share:brand'] }); var shareData = { title: title, // 分享标题 desc: desc,//这里请特别注意是要去除html link: link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: imgUrl, // 分享图标 }; wx.updateAppMessageShareData(shareData);//1.4 分享到朋友 wx.updateTimelineShareData(shareData);//1.4分享到朋友圈 }); } } </script> <script> $(document).ready(function () { var arr = $(".headercontent"); for (var i = 0; i < arr.length; i++) { (function (index) { var url = "https://m.bdocx.com/header.aspx"; $.get(url + "?t=" + (new Date()).valueOf(), function (d) { try { arr.eq(index).empty().html(d); } catch (e) { } try { arr.html(d); } catch (e) { } }); })(i); } }); </script> <script src="https://mstatic.bdocx.com/js/jquery.lazyload.js"></script> <script charset="utf-8"> $("img.lazys").lazyload({ threshold: 200, effect: "fadeIn" }); </script> </body> </html>