<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

    主站蜘蛛池模板: 久久亚洲最大成人网4438| 久久综合日韩亚洲精品色| 四虎影院免费视频| 美女一级毛片免费观看| 噜噜嘿在线视频免费观看| 午夜免费国产体验区免费的| 久久久久亚洲精品成人网小说 | 亚洲日韩精品一区二区三区| 久久久久成人精品免费播放动漫| 国产精品亚洲精品青青青| 亚洲国产精品成人AV无码久久综合影院| 国产日韩一区二区三免费高清| 自拍日韩亚洲一区在线| 亚洲综合在线另类色区奇米| 成年人网站免费视频| 亚洲乱码卡一卡二卡三| 亚洲黄片毛片在线观看| 无码区日韩特区永久免费系列| av网站免费线看| 国产亚洲sss在线播放| 亚洲欧洲日产国码av系列天堂| 24小时日本在线www免费的| 中文成人久久久久影院免费观看| 亚洲精品字幕在线观看| 色吊丝最新永久免费观看网站| 亚洲精品免费在线观看| 青草青草视频2免费观看| 亚洲一级黄色大片| 亚洲精品国产精品乱码不99| 亚洲?V无码乱码国产精品| 成人免费一区二区无码视频| 国产情侣久久久久aⅴ免费| 青娱乐在线视频免费观看| 国产亚洲玖玖玖在线观看| 久久久久亚洲AV成人片| 亚洲熟妇无码八AV在线播放| 免费一级毛片在级播放| 九九九精品成人免费视频| 最近2019年免费中文字幕高清| 国产免费久久精品丫丫| 粉色视频免费入口|