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

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

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

    靈魂-放水

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

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

    ?struts2 的demo 中的employee層可以清晰的暫時struts希望給開發(fā)者帶來的架構(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>
    ???
    -----------------------------
    每一個action有自己的properties文件,非常便于管理和代碼生成,
    當(dāng)然也有一個全局的globalMessages.properties來存放一些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

    每個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的地方,都會自動注入(因為action本質(zhì)也是bean,下面會講到)

    <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中的每一個action,也就是struts.xml里面聲明的action,最終都將作為spring中的一個bean完成請求。
    如果你不做額外的設(shè)定,struts2會自動生成這個bean。
    如果你有特殊的需要,還可以在applicationContext.xml自己聲明這個bean
    你必須根據(jù)需要來決定是否再次聲明
    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">? 這個foo,在applicationConext.xml中沒有聲明,struts會自動生成一個bean
    ??????????? <result>foo.ftl</result>
    ??????? </action>
    ??? </package>

    ??? <package name="secure" namespace="/secure" extends="default">
    ??????? <action name="bar" class="bar">?????????? 這個foo,在applicationConext.xml中聲明了,struts會使用下面配置
    ??????????? <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>

    -------------------------
    無縫集成ajax
    只要聲明了theme="ajax",該標(biāo)簽控件的操作就被轉(zhuǎn)換成ajax,請求發(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的一些缺陷,也可以看成是對ww2的一次重購。
    無疑是目前最主流,最強大的MVC框架了。

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

    集成了ajax(dojo+dwr)

    其插件支持jasperreports,jfreechart

    主站蜘蛛池模板: 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲国产成人精品无码区在线秒播| 亚洲国产美女精品久久| 在线免费视频你懂的| 99久久免费精品国产72精品九九 | 国产美女无遮挡免费视频| 亚洲经典在线观看| 久久九九免费高清视频| 亚洲最新在线视频| 亚洲M码 欧洲S码SSS222| 久久亚洲精品11p| aa级一级天堂片免费观看| 亚洲一卡2卡3卡4卡国产网站| 成全高清在线观看免费| 久久亚洲中文字幕精品一区| 男人j进女人p免费视频| 国产一级淫片免费播放| 国产亚洲综合久久| 免费人妻av无码专区| 老司机午夜性生免费福利| 亚洲国产一级在线观看| 黄色视频在线免费观看| 亚洲av永久无码嘿嘿嘿| 久久精品亚洲乱码伦伦中文| 一区二区无码免费视频网站| 久久国产免费观看精品| 7777久久亚洲中文字幕蜜桃| 免费h片在线观看网址最新| 亚洲日韩乱码久久久久久| 久久久久国产亚洲AV麻豆| 在线a毛片免费视频观看| 亚洲经典千人经典日产| 免费v片在线观看无遮挡| h视频在线观看免费完整版| 国产中文字幕在线免费观看 | 一级毛片大全免费播放下载| 亚洲欧洲日产国码高潮αv| 67194成是人免费无码| 97公开免费视频| 亚洲区日韩精品中文字幕| 亚洲成人影院在线观看|