LXF98:Java EE
|
|
|
zelboeltbo Шаблон:Цикл/Java EE
Содержание |
Struts, великий и ÑжаÑнÑй
ЧÐСТЬ 10 ÐомпÑÑÑеÑÑ Ð±Ñли пÑидÑманÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±Ð°Ð²Ð¸ÑÑ ÑеловеÑеÑÑво Ð¾Ñ ÑÑÑÐ¸Ð½Ñ â Ñак заÑем делаÑÑ Ð²ÑÑÑнÑÑ Ñо, ÑÑо можно ÑгенеÑиÑоваÑÑ Ð°Ð²ÑомаÑиÑеÑки? ÐлекÑÐ°Ð½Ð´Ñ Ðабаев покажеÑ, как Struts позволÑÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð¼Ð¾Ð½Ð¾Ñонного кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñиложений J2EE.
ÐÑÑÑнÑÑ Ð´ÐµÐ»Ð°ÑÑ Ð¿ÑоÑÑÑе веÑи Ñ Ð¾ÑоÑо: бÑÑÑÑо, пÑоÑÑо, понÑÑно. Ðо ÑÑо делаÑÑ, еÑли нÑжно Ñак же бÑÑÑÑо и пÑоÑÑо ÑоздаÑÑ Ð½ÐµÑÑо болÑÑое? СайÑ-поÑÑал, напÑимеÑ? Ðе ÑÐ¾Ñ Ð¿Ð¾ÑÑал, коÑоÑÑй ЯндекÑ, а коÑпоÑаÑивнÑй â где инÑегÑиÑована ÑиÑÑема Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑменÑов, инÑоÑмаÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑиÑÑема, наÑа адÑеÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°?
Ð PHP в ÑÑом ÑлÑÑае пÑÐ¸Ñ Ð¾Ð´Ð¸Ñ Ð½Ð° помоÑÑ CMS. Сладкие Ñлова, коÑоÑÑе обеÑаÑÑ Â«Ð² два клика» ÑделаÑÑ Ð²Ð°Ð¼ вÑе ÑÑо Ñгодно. ÐаÑкеÑинг, конеÑно, ÑÑÑаÑÐ½Ð°Ñ Ñила, но поÑÐµÐ¼Ñ Ñак много CMS на PHP, и Ð½ÐµÑ Ð½Ð° Java?
Ðозможно, пÑоÑÑо поÑÐ¾Ð¼Ñ ÑÑо не нÑжно. ÐеÑÑо CMS в Java занимаÑÑ ÑазнообÑазнÑе инÑÑÑÑменÑаÑии ÑазÑабоÑÑика, коÑоÑÑе помогаÑÑ Ð¾Ð±Ñ Ð¾Ð´Ð¸ÑÑ ÑложнÑе и ÑÑÑиннÑе ÑабоÑÑ. Ð ÑезÑлÑÑаÑе можно неболÑÑими Ñилами ÑделаÑÑ ÑиÑÑемÑ, по ÑложноÑÑи намного пÑевоÑÑ Ð¾Ð´ÑÑÑÑ Ñо, ÑÑо можно ÑделаÑÑ Â«Ð²ÑÑÑнÑÑ».
ЧÑо вклÑÑаеÑÑÑ Ð² Struts?
Struts не изобÑеÑÐ°ÐµÑ Ð²ÐµÐ»Ð¾Ñипедов. Рего оÑнове Ð»ÐµÐ¶Ð¸Ñ Ñаблон «MODEl-View-Controller», коÑоÑÑй Ð¼Ñ ÑаÑÑмаÑÑивали в LXF92, но Ñ ÐµÐ³Ð¾ помоÑÑÑ Ð¿ÑоÑе ÑоздаÑÑ Ð³ÑамоÑное пÑиложение, Ñак как ÑеÑко опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð·Ð°Ð´Ð°Ñи по его ÑозданиÑ; пÑоÑе ÑазобÑаÑÑÑÑ, ÑÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ напиÑаÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑезÑлÑÑаÑа.
ÐÑак, Struts (бÑдем ÑаÑÑмаÑÑиваÑÑ Ð±Ð¾Ð»ÐµÐµ пÑоÑÑÑÑ, пеÑвÑÑ Ð²ÐµÑÑиÑ) ÑодеÑжиÑ:
- API Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑабоÑÑика запÑоÑов (менеджеÑ, ÑаÑпÑеделÑÑÑий запÑоÑÑ Ð¿Ð¾ дейÑÑвиÑм) и Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÐ°Ð¼Ð¸Ñ Ð´ÐµÐ¹ÑÑвий (Actions).
- API Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑабоÑÑиков ÑоÑм.
- API Ð´Ð»Ñ ÑабоÑÑ Ñ Ð¿ÑовеÑкой коÑÑекÑноÑÑи Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (валидаÑии) ÑоÑм.
- Tiles. РаÑÑиÑение Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð´ÑлÑнÑÑ ÑÑÑÐ°Ð½Ð¸Ñ (ÑÑо-Ñо «вÑоде SSI»).
- JSP-taglib, библиоÑека JPS-ÑÑгов Ð´Ð»Ñ ÑпÑоÑÐµÐ½Ð¸Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ JSP-ÑÑÑаниÑ.
- XML-конÑигÑÑаÑионнÑе ÑайлÑ, Ð´Ð»Ñ Ð¿ÑоÑÑой и бÑÑÑÑой наÑÑÑойки вÑего вÑÑепеÑеÑиÑленного и ÑвÑзи его дÑÑг Ñ Ð´ÑÑгом.
ÐÑе ÑÑо в пÑедÑдÑÑÐ¸Ñ ÑÑаÑÑÑÑ Ð¼Ñ Ð´ÐµÐ»Ð°Ð»Ð¸ вÑÑÑнÑÑ. ТепеÑÑ Ð½Ð°ÑÑало вÑÐµÐ¼Ñ Ð¿ÑоделаÑÑ Ñо же Ñамое более «ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñно».
Ðак ÑÑим полÑзоваÑÑÑÑ?
Ðо-пеÑвÑÑ , библиоÑÐµÐºÑ Ð½Ñжно ÑкаÑаÑÑ. ÐÑо можно ÑделаÑÑ Ñо ÑÑÑаниÑки http://struts.apache.org/download.cgi#struts138. ÐоÑле Ñего ÑледÑÐµÑ ÑаÑпаковаÑÑ Ð¿Ð¾Ð»ÑÑеннÑй Ñайл и вÑÑаÑиÑÑ Ð¾ÑÑÑда вÑе JAR-аÑÑ Ð¸Ð²Ñ.
РкаÑеÑÑве пÑимеÑа, Ñоздадим Ñже знакомÑÑ ÑелеÑоннÑÑ ÐºÐ½Ð¸Ð³Ñ. СпеÑва каÑалог; в нем, как вÑегда, оÑганизÑем подкаÑалоги Ð´Ð»Ñ Ð¸ÑÑ Ð¾Ð´Ð½ÑÑ ÑекÑÑов, ÑкомпилиÑованного кода, библиоÑек и JSP-Ñайлов. ÐолÑÑиÑÑÑ ÑÑо-Ñо Ñакое:
- libs
- antlr-2.7.2.jar
- bsf-2.3.0.jar
- commons-beanutils-1.7.0.jar
- commonschain-1.1.jar
- commons-digester-1.8.jar
- commons-fileipload-1.1.1.jar
- commons-io-1.1.jar
- commons-logging-1.0.4.jar
- commons-validator-1.3.1.jar
- jstl-1.0.2.jar
- oro-2.0.8.jar
- standart-1.0.2.jar
- struts-core-1.3.8.jar
- struts-el-1.3.8.jar
- struts-extras-1.3.8.jar
- struts-faces-1.3.8.jar
- struts-mailreader-dao-1.3.8.jar
- struts-scripting-1.3.8.jar
- struts-taglib-1.3.8.jar
- struts-tiles-1.3.8.jar
- out
- src
- MessageResources_en.properties
- MessageResources_ru.properties
- ru
- web
- index.jsp
- pages
- WEB-INF
ÐаÑем в каÑалог библиоÑек нÑжно положиÑÑ JAR-ÑÐ°Ð¹Ð»Ñ Struts. ÐоÑово? Тогда можно пÑиÑÑÑпаÑÑ Ðº кодиÑованиÑ.
Ðогда запÑÐ¾Ñ Ð¿ÑÐ¸Ñ Ð¾Ð´Ð¸Ñ Ð² ÑеÑвлеÑ, он пеÑвÑм делом Ð¿Ð¾Ð¿Ð°Ð´Ð°ÐµÑ Ð² Struts, коÑоÑÑй пеÑенапÑавлÑÐµÑ ÐµÐ³Ð¾ в Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð·Ð°Ð¿ÑоÑов (ActionServet) и далее в нÑжное дейÑÑвие (Action). ÐÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿ÑимеÑно Ñак:
Ðак видно, ÑÑ ÐµÐ¼Ð° здоÑово Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°ÐµÑ Ð¿ÑимененнÑÑ Ð½Ð°Ð¼Ð¸ пÑи Ñоздании адÑеÑной книги. ÐаÑем Ñогда Struts? РзаÑем, ÑÑÐ¾Ð±Ñ Ð½Ðµ пиÑаÑÑ Ð¼Ð½Ð¾Ð³Ð¾-много одноÑипного кода, коÑоÑÑй повÑоÑÑеÑÑÑ Ð¸Ð· пÑоекÑа в пÑоекÑ.
ÐонÑигÑÑаÑионнÑе ÑайлÑ
ÐнаÑале наÑÑимÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ Struts. ÐÐ»Ñ ÑÑого нÑжно пеÑенапÑавиÑÑ Ð²Ñе запÑоÑÑ ÑеÑвлеÑÑ-обÑабоÑÑÐ¸ÐºÑ Ð¸ напиÑаÑÑ Ñайл конÑигÑÑаÑии. ÐÐ¾Ñ Ð¿ÑоÑÑой деÑкÑипÑÐ¾Ñ Ð´Ð»Ñ Ð¿ÑоÑÑого Struts-пÑиложениÑ:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
Ðидно, ÑÑо вÑе запÑоÑÑ *.do пеÑедаÑÑÑÑ ÑеÑвлеÑÑ action, обÑабаÑÑÐ²Ð°ÐµÐ¼Ð¾Ð¼Ñ ÐºÐ»Ð°ÑÑом ActionServlet. ÐÑо ÑÑандаÑÑнÑй клаÑÑ Struts, коÑоÑÑй пеÑенапÑавлÑÐµÑ Ð·Ð°Ð¿ÑоÑÑ Ð² дейÑÑвиÑ. ÐÐ¼Ñ Ð¿ÐµÑедаеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑионнÑй Ñайл struts-config.xml. ÐÐ¾Ñ Ð¾Ð½:
<?xml version="1.0" encoding="UTF-8" ?> <struts-config> <form-beans> <form-bean name="addForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="name" type="java.lang.String" initial="Name"/> <form-property name="phone" type="java.lang.String" initial="1234567"/> <form-property name="age" type="java.lang.Integer" initial="20"/> <form-property name="comment" type="java.lang.String" initial="NoComment"/> </form-bean> <action-mappings> <action path="/add" name="addForm" validate="true" type="ru.linuxformat.actions.Add"> <forward name="form" path="/pages/Add.jsp"/> <forward name="done" path="/list.do"/> </action> <action path="/list" type="ru.linuxformat.actions.ShowAll"> <forward name="ok" path="/pages/List.jsp"/> </action> </action-mappings> <message-resources parameter="MessageResources"/> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/org/apache/struts/validator/validator-rules.xml,/WEB-INF/validation.xml"/> </plug-in> </struts-config>
Рданном Ñайле опиÑана ÑоÑма Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑакÑа (form-bean), Ñ Ð¸ÑполÑзованием ÑÑандаÑÑного клаÑÑа ÑоÑÐ¼Ñ Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой авÑомаÑиÑеÑкой пÑовеÑки полей (DynaValidatorForm).
ÐоÑле ÑÑого опиÑано, какие запÑоÑÑ Ð² какие клаÑÑÑ Ð¿ÐµÑенапÑавлÑÑÑÑÑ.
<action path="/list" type="ru.linuxformat.actions.ShowAll"> <forward name="ok" path="/pages/List.jsp"/> </action>
Ð ÑÑом пÑимеÑе запÑÐ¾Ñ /list.do Ð¿Ð¾Ð¹Ð´ÐµÑ Ð² клаÑÑ ShowAll.Forward иÑполÑзÑеÑÑÑ Ð²Ð½ÑÑÑи дейÑÑвиÑ, ÑÑÐ¾Ð±Ñ ÑпÑоÑÑиÑÑ Ð¿ÐµÑенапÑавление вÑвода. ÐалÑÑе бÑÐ´ÐµÑ Ð¿Ð¾Ð½ÑÑно, как.
ÐоÑле опиÑÐ°Ð½Ð¸Ñ Ð´ÐµÐ¹ÑÑвий вÑе ÑÑановиÑÑÑ ÑовÑем пÑоÑÑо.ÐпиÑÑваеÑÑÑ Ñайл, оÑкÑда бÑдÑÑ Ð±ÑаÑÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñе ÑÑÑоки, и подклÑÑаеÑÑÑ Ð¼Ð¾Ð´ÑлÑ, коÑоÑÑй обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð¿ÑоÑÑÑÑ Ð¸ моÑнÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ (пÑовеÑкÑ) ÑоÑм.
ÐейÑÑвиÑ
ÐеÑейдем к клаÑÑам. ÐÑе они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑнаÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ñ Ð¾Ñ ÐºÐ»Ð°ÑÑа org.apache.struts.action.Action. ÐÑи ÑÑом в пÑоÑÑейÑем ÑлÑÑае нÑжно пеÑеопÑеделиÑÑ ÑолÑко один меÑод, execute(â¦). ÐапÑимеÑ, Ð²Ð¾Ñ Ð´ÐµÐ¹ÑÑвие, коÑоÑое показÑÐ²Ð°ÐµÑ ÑпиÑок конÑакÑов:
public class ShowAll extends Action { public ActionForward execute(ActionMapping aActionMapping, ActionForm aActionForm, HttpServletRequest aHttpServletRequest, HttpServletResponse aHttpServletResponse) throws Exception { aHttpServletRequest.setAttribute("contacts", Contacter.getInstance().getContactsSortedByName()); return aActionMapping.findForward("ok"); } }
Ð ÑÑом дейÑÑвии в аÑÑибÑÑ Ð·Ð°Ð¿ÑоÑа кладеÑÑÑ ÑпиÑок вÑÐµÑ ÐºÐ¾Ð½ÑакÑов, поÑле Ñего вÑзÑваеÑÑÑ ÑоÑваÑд "ok" â именно он бÑл опиÑан ÑÑÑÑ Ð²ÑÑе.
<action path="/list" type="ru.linuxformat.actions.ShowAll"> <forward name="ok" path="/pages/List.jsp"/> </action>
Ðз опиÑÐ°Ð½Ð¸Ñ Ð²Ð¸Ð´Ð½Ð¾, ÑÑо ÑоÑваÑд пеÑенапÑавлÑÐµÑ Ð¾Ð±ÑабоÑÐºÑ Ð·Ð°Ð¿ÑоÑа в 'List.jsp. ÐоÑмоÑÑим, ÑÑо в нем напиÑано:
<%@ page pageEncoding="UTF-8" language="java" contentType="text/ html; utf-8" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %> <html:html> <head> ⦠</head> <body> ⦠<table border="1"> <tr> <td><bean:message key="AddressBook.list.name"/></td> <td><bean:message key="AddressBook.list.phone"/></td> <td><bean:message key="AddressBook.list.comment"/></td> <td><bean:message key="AddressBook.list.age"/></td> </tr> <logic:iterate id="contact" type="ru.linuxformat.Contact" name="contacts" scope="request"> <tr> <td><%=contact.getName()%></td> <td><%=contact.getPhone()%></td> <td><%=contact.getComment()%></td> <td><%=contact.getAge()%></td> </tr> </logic:iterate> </table> </body> </html:html>
Ðа многоÑоÑÐ¸Ñ Ð·Ð°Ð¼ÐµÐ½ÐµÐ½Ñ Ð½ÐµÐ¸Ð½ÑеÑеÑнÑе кÑÑки кода, а инÑеÑеÑное â в Ñамом наÑале лиÑÑинга (taglib). ÐÑо Ñак назÑваемÑе библиоÑеки ÑÑгов. ÐÑимеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ видеÑÑ Ð·Ð´ÐµÑÑ Ð¶Ðµ. Скажем, <bean:messagekey="AddressBook.list.name"/> вÑÑавлÑÐµÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½ÑÑ ÑÑÑокÑ, ÑооÑвеÑÑÑвÑÑÑÑÑ Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ ÐºÐ»ÑÑÑ. Ð <logic:iterate> ÑÐ¼ÐµÐµÑ Ð¸ÑеÑиÑоваÑÑ Ð¿Ð¾ коллекÑиÑм (ÑпиÑки, аÑÑоÑиаÑивнÑе маÑÑÐ¸Ð²Ñ Ð¸ Ñак далее). Рданном ÑлÑÑае Ð¼Ñ Ð¸ÑеÑиÑÑем по аÑÑибÑÑÑ Ð·Ð°Ð¿ÑоÑа contacts, коÑоÑÑй Ð¼Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ð»Ð¸ ÑÑда в дейÑÑвии.
ФоÑмÑ, пÑовеÑка коÑÑекÑноÑÑи ÑоÑм
ÐÑÑÐ³Ð°Ñ Ð¸Ð½ÑеÑеÑÐ½Ð°Ñ ÑаÑÑÑ â ÑоÑмÑ. ÐÑоÑое дейÑÑвие, добавление конÑакÑа, вÑглÑÐ´Ð¸Ñ ÑледÑÑÑим обÑазом (пÑиведен ÑолÑко код меÑода execute):
if (aHttpServletRequest.getParameter("name") == null) { return aActionMapping.findForward("form"); } else { DynaActionForm form = (DynaActionForm) aActionForm; Contacter.getInstance().addContact(form.getString("name"), form. getString("phone"), form.getString("comment"), (Integer) form. get("age")); return aActionMapping.findForward("done"); }
Ðогика оÑÐµÐ½Ñ Ð¿Ð¾Ñ Ð¾Ð¶Ð° на ÑÑ, ÑÑо бÑла в пÑедÑдÑÑÐ¸Ñ ÑÑаÑÑÑÑ . ÐÑли ÑоÑма не заполнена, пеÑÐµÑ Ð¾Ð´Ð¸Ð¼ по ÑоÑваÑÐ´Ñ form, коÑоÑÑй показÑÐ²Ð°ÐµÑ ÑоÑÐ¼Ñ Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð°. ÐÑли она заполнена (и валидиÑована), Ñо конÑÐ°ÐºÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑÑÑ Ð² ÑпиÑок, и Ð¼Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð¸Ð¼ на ÑоÑваÑд done. ÐÐ¾Ñ Ð¸ Ñама ÑоÑма (ÑоÑнее, ее оÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑаÑÑÑ):
<html:form action="/add" method="post" onsubmit="return validateAddForm(this);"> <table> <tr> <td><bean:message key="AddressBook.add.name"/>:</td> <td><html:text property="name"/></td> </tr> ⦠<tr> <td colspan="2"><html:submit titleKey="AddressBook.add. submit"/></td> </tr> </table> </html:form> <html:javascript formName="addForm"/>
ТÑÑ Ð¸Ð½ÑеÑеÑÐ½Ñ Ð´Ð²Ð° моменÑа. Ðо-пеÑвÑÑ , иÑполÑзÑÑÑÑÑ ÑÑги Struts (html:â¦), ÑпÑоÑаÑÑие Ñоздание компоненÑов ÑоÑмÑ. Ðо-вÑоÑÑÑ , иÑполÑзÑеÑÑÑ ÑкÑÐ¸Ð¿Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии (onsubmit="â¦" и <html:Javascript â¦>). Ðн обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð¿ÑÑмо в бÑаÑзеÑе, не оÑÑÑÐ»Ð°Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½Ð° ÑеÑвеÑ.
Сами пÑавила валидаÑии задаÑÑÑÑ Ð² Ñайле validation.xml. ÐÐ¾Ñ ÐºÐ°Ðº ÑÑо вÑглÑдиÑ:
<form-validation> <formset> <form name="addForm"> <field property="age" depends="required,integer,intRange"> <arg key="AddressBook.add.age"/> <arg position="1" name="intRange" key="10" resource="false"/> <arg position="2" name="intRange" key="20" resource="false"/> <var><var-name>min</var-name><var-value>10</var-value></ var> <var><var-name>max</var-name><var-value>20</var-value></ var> </field> </form> </formset> </form-validation>
ФоÑÐ¼Ñ Ñ Ñоздал в struts-config. ÐазÑваÑÑÑÑ Ð¾Ð½Ð° должна Ñак же. ÐÐ»Ñ Ð¿Ð¾Ð»Ñ age задаеÑÑÑ ÑÑи пÑавила валидаÑии: required, integer, intRange. ÐеÑвое говоÑиÑ, ÑÑо поле обÑзаÑелÑно, вÑоÑое â ÑÑо знаÑение должно бÑÑÑ ÑелоÑиÑленнÑм, ÑÑеÑÑе пÑавило ÑообÑаеÑ, ÑÑо знаÑение должно лежаÑÑ Ð² пÑÐµÐ´ÐµÐ»Ð°Ñ Ð¾Ñ 10 до 20. РкаÑеÑÑве паÑамеÑÑов задаÑÑÑÑ Ð°ÑгÑменÑÑ ÑообÑений, коÑоÑÑе бÑдÑÑ Ð²ÑводиÑÑÑÑ Ð¿Ñи оÑибоÑном заполнении ÑоÑÐ¼Ñ (arg), и паÑамеÑÑÑ Ð´Ð»Ñ Ð¿Ñавил валидаÑии (var).
ÐокализаÑиÑ
ÐоÑледнÑÑ ÑаÑÑÑ, пока не опиÑÐ°Ð½Ð½Ð°Ñ â локализаÑиÑ. СообÑÐµÐ½Ð¸Ñ Ñ ÑанÑÑÑÑ Ð² Ñак назÑваемÑÑ properties-ÑÐ°Ð¹Ð»Ð°Ñ , пÑиÑем еÑли property-Ñайл назÑваеÑÑÑ MessageResources, Ñо, напÑимеÑ, Ñайл ÑÑÑÑкой локализаÑии должен назÑваÑÑÑÑ MessageResources_ru.properties, а английÑкой â MessageResources_en.properties. ÐÑли нÑжно ÑÑоÑниÑÑ â напÑимеÑ, английÑкий ÑзÑк, ÐмеÑика â Ñо полÑÑаеÑÑÑ Ñак: MessageResources_en_US.properties.
СÑÑÑкÑÑÑа Ñайлов properties оÑÐµÐ½Ñ Ð¿ÑоÑÑа. ÐÐ°Ð¶Ð´Ð°Ñ ÑÑÑока (не пÑÑÑÐ°Ñ Ð¸ не комменÑаÑий) ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· двÑÑ ÑаÑÑей, ÑазделеннÑÑ Ð·Ð½Ð°ÐºÐ¾Ð¼ ÑавенÑÑва (=). Слева â клÑÑ, ÑпÑава â знаÑение ÑÑого клÑÑа.
ÐÑи ÑÐ°Ð¹Ð»Ñ Ð½Ñжно положиÑÑ Ð² каÑалог src, и пÑоконÑÑолиÑоваÑÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ пеÑепиÑалиÑÑ ÑÑда же, кÑда попадаÑÑ class-ÑайлÑ. ÐлÑÑ, Ð´Ð»Ñ Ð½ÐµÐ°Ð½Ð³Ð»Ð¸Ð¹ÑÐºÐ¸Ñ Ñайлов, Ð¸Ñ Ð½Ñжно пÑеобÑазоваÑÑ Ð² ASCII-ÑоÑмаÑ. ÐÑо делаеÑÑÑ ÑÑилиÑой native2ascii из поÑÑавки JDK. ÐнÑÑÑÑкÑии по полÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑилиÑой можно найÑи здеÑÑ: http://Java.sun.com/Javase/6/docs/technotes/tools/windows/native2ascii.html.
ÐоÑле ÑÑого можно иÑполÑзоваÑÑ Ð² JSP вÑÑавки вида <bean:message key="AddressBook.add.name"/>, вмеÑÑо коÑоÑÑÑ Ð±ÑÐ´ÐµÑ Ð²ÑÑавлена Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÑÑÑока, ÑооÑвеÑÑÑвÑÑÑÐ°Ñ Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ ÐºÐ»ÑÑÑ (в пÑимеÑе â AddressBook.add.name).
ЧÑо далÑÑе?
Struts â Ð²ÐµÐ»Ð¸ÐºÐ¾Ð»ÐµÐ¿Ð½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека, позволÑÑÑÐ°Ñ ÑпÑоÑÑиÑÑ ÑазÑабоÑÐºÑ ÑложнÑÑ Ð¿Ñиложений. ÐÑобенно Ñ Ð¾ÑоÑо Ñакого Ñода библиоÑеки Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑ Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ñ, в коÑоÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ моноÑонной ÑабоÑÑ: болÑÑÐ¸Ñ ÑоÑм, болÑÑого колиÑеÑÑва пÑоÑÑÑÑ Ð´ÐµÐ¹ÑÑвий, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑÑ Ð¿ÑовеÑки даннÑÑ , вводимÑÑ Ð² ÑоÑмÑ, локализаÑиÑ.
Также полезно, ÑÑо иÑполÑзÑÑÑÑÑ ÑÑандаÑÑнÑе ÑÑедÑÑва: JSP, Servlets, да и Ñам Struts â ÑÐ°Ð¼Ð°Ñ ÑаÑпÑоÑÑÑÐ°Ð½ÐµÐ½Ð½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека Ð´Ð»Ñ Ñакого Ñода ÑабоÑ. Ð ÑезÑлÑÑаÑе пÑи пÑиеме на ÑабоÑÑ, напÑимеÑ, знание именно Struts позволÑÐµÑ Ð½Ð°Ð±ÑаÑÑ Ð½ÐµÑколÑко дополниÑелÑнÑÑ Ð±Ð°Ð»Ð»Ð¾Ð².
ÐÑавда, еÑе болÑÑе баллов Ð´Ð°ÐµÑ Ð·Ð½Ð°Ð½Ð¸Ðµ EJB3. Ðо об ÑÑом Ð¼Ñ Ð¿Ð¾Ð³Ð¾Ð²Ð¾Ñим в ÑледÑÑÑей, заклÑÑиÑелÑной ÑÑаÑÑе.