<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    靈魂-放水

    為學(xué)日益,為道日損。

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      296 Posts :: 10 Stories :: 274 Comments :: 0 Trackbacks

    ?struts2 的demo 中的employee層可以清晰的暫時(shí)struts希望給開(kāi)發(fā)者帶來(lái)的架構(gòu)

    --------------------------

    EmployeeAction <-- AbstractCRUDAction (web 層)
    ?? ^
    ?? |
    EmployeeDao <-- AbstractDao <-- Dao (Domain 層,demo中也作為service存在于spring容器中)
    ?? ^
    ?? |
    Employee <--IDEntity

    --------------------------

    struts.xml 配置

    ??? <package name="skill" extends="default" namespace="/skill">
    ??????? <default-interceptor-ref name="crudStack"/>

    ??????? <action name="list" class="org.apache.struts2.showcase.action.SkillAction" method="list">
    ??????????? <result>/empmanager/listSkills.jsp</result>
    ??????????? <interceptor-ref name="basicStack"/>
    ??????? </action>
    ??????? <action name="edit" class="org.apache.struts2.showcase.action.SkillAction">
    ??????????? <result>/empmanager/editSkill.jsp</result>
    ??????????? <interceptor-ref name="params" />
    ??????????? <interceptor-ref name="basicStack"/>
    ??????? </action>
    ??????? <action name="save" class="org.apache.struts2.showcase.action.SkillAction" method="save">
    ??????????? <result name="input">/empmanager/editSkill.jsp</result>
    ??????????? <result type="redirect">edit.action?skillName=${currentSkill.name}</result>
    ??????? </action>
    ??????? <action name="delete" class="org.apache.struts2.showcase.action.SkillAction" method="delete">
    ??????????? <result name="error">/empmanager/editSkill.jsp</result>
    ??????????? <result type="redirect">edit.action?skillName=${currentSkill.name}</result>? 這里展現(xiàn)了struts2具有良好的url特性,比起ww的crud!edit讓人舒服多了
    ??????? </action>
    ??? </package>

    ??? <package name="employee" extends="default" namespace="/employee">
    ??????? <default-interceptor-ref name="crudStack"/>

    ??????? <action name="list" class="org.apache.struts2.showcase.action.EmployeeAction" method="list">
    ??????????? <result>/empmanager/listEmployees.jsp</result>
    ??????????? <interceptor-ref name="basicStack"/>
    ??????? </action>
    ??????? <action name="edit-*" class="org.apache.struts2.showcase.action.EmployeeAction">
    ???????? <param name="empId">{1}</param>
    ??????????? <result>/empmanager/editEmployee.jsp</result>
    ??????????? <interceptor-ref name="crudStack"><param name="validation.excludeMethods">execute</param></interceptor-ref>
    ??????? </action>
    ??????? <action name="save" class="org.apache.struts2.showcase.action.EmployeeAction" method="save">
    ??????????? <result name="input">/empmanager/editEmployee.jsp</result>
    ??????????? <result type="redirect">edit-${currentEmployee.empId}.action</result>
    ??????? </action>
    ??????? <action name="delete" class="org.apache.struts2.showcase.action.EmployeeAction" method="delete">
    ??????????? <result name="error">/empmanager/editEmployee.jsp</result>
    ??????????? <result type="redirect">edit-${currentEmployee.empId}.action</result>
    ??????? </action>
    ??? </package>
    ???
    -----------------------------
    每一個(gè)action有自己的properties文件,非常便于管理和代碼生成,
    當(dāng)然也有一個(gè)全局的globalMessages.properties來(lái)存放一些save,delete這些都一樣的字符
    employee=Employee
    employee.firstName=First Name
    employee.lastName=Last Name
    employee.description=Description

    employee.id.required=Id is required
    employee.lastName.required=Last Name is required
    employee.birthDate.required=Birthdate is required
    employee.backtolist=Back to Employee List

    每個(gè)action自己的validation
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "<validators>
    ??? <!-- Field-Validator Syntax -->
    ??? <field name="currentEmployee.empId">
    ??????? <field-validator type="required">
    ??????????? <message key="employee.id.required"/>
    ??????? </field-validator>
    ??? </field>
    ??? <field name="currentEmployee.lastName">
    ??????? <field-validator type="requiredstring">
    ??????????? <param name="trim">true</param>
    ??????????? <message key="employee.lastName.required"/>
    ??????? </field-validator>
    ??? </field>
    ??? <field name="currentEmployee.birthDate">
    ??????? <field-validator type="required">
    ??????????? <message key="employee.birthDate.required"/>
    ??????? </field-validator>
    ??? </field>
    </validators>

    --------------------------------
    DAO是spring的bean,spring默認(rèn)作為struts2的業(yè)務(wù)組件容器
    在struts.properties中struts.objectFactory = spring

    由于這里是autowire,Autowiring means to look for objects defined in Spring with the same name as your object property
    所以action中所有用到IoC的地方,都會(huì)自動(dòng)注入(因?yàn)閍ction本質(zhì)也是bean,下面會(huì)講到)

    <beans default-autowire="byName"> wire有四種方法:name, type, auto, constructor

    ??? <bean id="skillDao" class="org.apache.struts2.showcase.dao.SkillDao"/>
    ??? <bean id="employeeDao" class="org.apache.struts2.showcase.dao.EmployeeDao"/>
    ???
    ----------------------------------
    struts2中的每一個(gè)action,也就是struts.xml里面聲明的action,最終都將作為spring中的一個(gè)bean完成請(qǐng)求。
    如果你不做額外的設(shè)定,struts2會(huì)自動(dòng)生成這個(gè)bean。
    如果你有特殊的需要,還可以在applicationContext.xml自己聲明這個(gè)bean
    你必須根據(jù)需要來(lái)決定是否再次聲明
    struts.xml
    <!DOCTYPE struts PUBLIC
    ??? "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    ??? "
    <struts>
    ??? <include file="struts-default.xml"/>

    ??? <package name="default" extends="struts-default">
    ??????? <action name="foo" class="com.acme.Foo">? 這個(gè)foo,在applicationConext.xml中沒(méi)有聲明,struts會(huì)自動(dòng)生成一個(gè)bean
    ??????????? <result>foo.ftl</result>
    ??????? </action>
    ??? </package>

    ??? <package name="secure" namespace="/secure" extends="default">
    ??????? <action name="bar" class="bar">?????????? 這個(gè)foo,在applicationConext.xml中聲明了,struts會(huì)使用下面配置
    ??????????? <result>bar.ftl</result>
    ??????? </action>
    ??? </package>
    </struts>

    applicationConext.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
    <beans default-autowire="autodetect">
    ??? <bean id="bar" class="com.my.BarClass" singleton="false"/>
    ??? ...
    </beans>

    -------------------------
    無(wú)縫集成ajax
    只要聲明了theme="ajax",該標(biāo)簽控件的操作就被轉(zhuǎn)換成ajax,請(qǐng)求發(fā)送到AjaxRemoteForm
    Configured Editor configuration:
    <s:form id="form2" action="AjaxRemoteForm" method="post">
    ??? <s:textarea id="editor2" name="data" theme="ajax" cols="50" rows="10" value="Test Data 2">
    ??????? <s:param name="editorControls">textGroup;|;justifyGroup;|;listGroup;|;indentGroup</s:param>
    ??? </s:textarea>
    ??? <s:submit value="Submit"/>
    </s:form>


    ------------------------
    集成了多種模板
    jsp,velocity,freemaker


    ------------------------

    struts2 繼承了ww2的優(yōu)良傳統(tǒng),并且擯棄了ww2的一些缺陷,也可以看成是對(duì)ww2的一次重購(gòu)。
    無(wú)疑是目前最主流,最強(qiáng)大的MVC框架了。

    它實(shí)現(xiàn)了和spring的完美結(jié)合

    集成了ajax(dojo+dwr)

    其插件支持jasperreports,jfreechart

    主站蜘蛛池模板: 国产无人区码卡二卡三卡免费| 亚洲欧洲国产综合| 免费看大黄高清网站视频在线| 四虎国产精品永久免费网址| 香蕉视频在线观看免费| 久久亚洲精品国产精品婷婷| 日木av无码专区亚洲av毛片| 亚洲中文字幕无码久久精品1| 国产成人免费永久播放视频平台| 中文免费观看视频网站| 日韩视频在线观看免费| 国产精品青草视频免费播放| 美女无遮挡免费视频网站| jlzzjlzz亚洲jzjzjz| 亚洲永久永久永久永久永久精品| 久久亚洲精品视频| 亚洲日韩精品A∨片无码| 亚洲福利在线播放| 国产乱子影视频上线免费观看| 人妻视频一区二区三区免费| 久久免费看黄a级毛片| 日韩免费无码视频一区二区三区| 国产精品偷伦视频免费观看了| 丰满少妇作爱视频免费观看| 美女被暴羞羞免费视频| 亚洲av综合av一区二区三区| 77777午夜亚洲| 在线aⅴ亚洲中文字幕| 亚洲天然素人无码专区| 亚洲综合激情五月色一区| 91丁香亚洲综合社区| 久久乐国产综合亚洲精品| 自拍偷区亚洲国内自拍| 亚洲国产精品无码久久98| 亚洲成AV人片在WWW| 羞羞视频免费网站入口| 曰批全过程免费视频免费看| 日韩在线视频线视频免费网站| 一级做α爱过程免费视频| 一区二区在线免费视频| 中文字幕乱理片免费完整的|