活学を活用したStruts


作者:call vin,gnian 0412
1.概要
Strutsさんはみんなよく知っていますので、もう詳しく紹介しません.
1.Pragmatic Struts:SpringSideが推奨する最新のPragmaticの使い方.
2.SprigSideのStrutsパッケージ、SpringSideパッケージのStrutsのCRUD Actionベースクラスは、デフォルトではCRUDの方法があります.みんなは自分で拡張したり、この考えを参考にして新たにパッケージ化したりできます.
1.1参考書
「Jakata Struts Cookbook」2005 O'Reillyは、鉄腕のブログ上に中国語の翻訳が一部あります.
2.SpringとStrutsの統合
2.1 struts-config.xmlにConttext Loader PlugInを追加する
Contect Loader PlunInはStruts 1.1+のプラグインであり、StrutsのアクションセットのためにSpringをロードするAppplication Contectである.このContextはWebApplication Comptext(Contect Loader Listenerによってロードされます)をその親Contectとして引用します.デフォルトのcontextファイルは、マッピングされたアクションServletの名前であり、加えて-servlet.xmlの拡張子です.アクションServletがweb.xmlでactionと定義されている場合、デフォルトのファイルは/WEB-INF/actionn-servlet.xmlです.
フォーマットは以下の通りです
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/>
2.2 Struts-config.xmlにDelegating Request Processorを追加する
SpringのDelegating Request Process orでStrutsデフォルトのRequest Processorを重載します.このようにActionに対する要求を受けると、Delegating Request Processorは自動的にSpring Contectから対応するアクションBenを検索する.
フォーマットは以下の通りです
<controller>
<set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
</controller>
2.3 struts-config.xmlとactionn-servlet.xmlのActionとBenの対応関係を確立する
struts-config.xmlとactionn-servlet.xmlをつなぐアクションとビーンの橋はactionの「path」とbeanの「name」です.struts-config.xmlファイルに「action path="/users"/」という設定があれば、actionn-servlet.xmlでアクションbeanの名前を「/users」と定義します.なお、ここでbeanはidではなくname属性を使用しています.
3.入力チェックとメッセージの表示
検査はまだ面倒です.COMMUS-validatorの1.3版を使って、struts 1.35ベルトのvalidator-rules.xmlを使います.オプションのvalidatorは、validator-rules.xmlで定義されているものに準じる.
3.1定義
注意validaton.xmlの頭声明は1.3に変更する必要があります.
<!DOCTYPE form-validation PUBLIC
        "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
        "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
validation.xmlを作成します.
<form name="userForm">
            <field property="name" depends="required">
                <arg0 key="user.name"/>
            </field>
</form>
そして、reources/i 18 n/messages.propertiesに必要なmessageを加入して、user.name=User Nameのようです.
struts-config.xml加入
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
3.2クライアントJSチェック:
各フォームm.jspのformにonsubmit=「return validateUser Form(this)」を追加します.この中でUserFormはvalidation.xmlのform名です.
jspの最後に参加します
<html:javascript formName="userForm" staticJavascript="false" cdata="false"/>
<script type="text/javascript" src="<c:url value="/scripts/validator.jsp"/>"></script>
3.3サービス端末検証:
ActionMessages errors = form.validate(mapping, request);
        if (!errors.isEmpty()) {
            saveErrors(request, errors);
            return mapping.findForward("edit");
        }
3.4エラーメッセージの表示:
メッセージ.jspを参照して、情報またはエラーを表示することができます.
表示したいところに「%@include file="/commons/messages.jsp」%を追加します.
もし同時に列の中でエラーを表示したいなら、
付録:Pragmatic Struts
Pragmatic Struts
Struts 1.2は実はもう大きく違っています.簡単な態度があれば、たとえ私達の日常のStrutsであっても、同じく非常に簡潔に書くことができます.伝統観念が思っているように、そんなに重くなくてもいいです.
StrutsとSpringを結合した基本的な知識はStruts使用のポイントを読んでください.
1.Displatchアクション
一つのコントロラーで一つの動作に応答すると絶対にコントロラー界の真理です.StrutsのDisplatchアクションも同じです.
<action path="/admin/user" name="userForm" scope="request" parameter="method" validate="false">
    <forward name="list" path="/admin/userList.jsp"/>
</action>
ここで、parameter=「method」は、応答方法名を指定するためのurlパラメータ名をmethodとし、すなわち/admin/user.do?method=listがUserActionを呼び出すpusblic Action Forward list(...)関数を設定している.
public ActurForward unspecified(...)関数は、methodメソッドを持たない場合のデフォルト方法を指定できます.
2.No FormBen
Struts 1.2.7以降は全部で3つの方法があります.FormBen Java類を定義する必要もなく、struts-config.xmlにformBenの各属性を詳細に定義する必要もありません.
一つはappfuseで使っています.DynaValidatorsFormの中に、pojoの属性が埋め込まれています.
<form-bean name="userForm" type="org.apache.struts.validator.DynaValidatorForm">
            <form-property name="user" type="org.appfuse.model.User"/>
</form-bean>
//  form DynaActionForm userForm = (DynaActionForm) form;
User user = (User) userForm.get("user");
//  form
userForm.set("user",user);
二つ目はBeanValidatoFormで直接PojoをFormBenとし、FormBenインターフェースに継承する必要がないです.
<form-bean name="userForm" type="org.springside.helloworld.domain.User"/>
//  form BeanValidatorForm userForm = (BeanValidatorForm) form;
User user = (User) userForm.getInstance();//  formBeanUtils.copyProperties(userForm, user);
第3の種類はLazyValidatoFormで、特にFormBenにPOJO商業オブジェクトのすべての属性が含まれていない場合に適しています.通常の項目はこのような状況ですので、springsideはlazyValidatoFormをデフォルトで使用します.
例えば、Userオブジェクトにはid、name、statusの3つの属性があり、formフォームにはidとnameの2つのinputボックスしかありません.使い方1、2で、直接にuserをform beanとします.userオブジェクトのstatusは値を設定していませんので、null、copyをビジネスの対象となるuserにするときはnullで原値を上書きします.lazyBeanはこの問題がありません.formにstatus属性がないと、ビジネス対象にcopyを与えません.
また、apache common-beantuils 1.7.0のlazyboeanはまだ小さいbugがあります.commons-1.7.1 snapshot版を使用しなければなりません.また、ダウンロードしたsnapshot版を直接提供します.
<form-bean name="bookForm" type="org.apache.struts.validator.LazyValidatorForm"/>
BeanUtils.copyProperties(user, form);
注意Userオブジェクトは自動的にバインディングされています.デフォルトのInteger idは空の値の時に0に割り当てられます.converterを追加してデフォルトのnullにする必要があります.web.xmlにも関連した配置ができますが、ベースクラスには比較的安全に配置されています.
static {
ConvertUtils.register(new IntegerConverter(null), Integer.class);
}
3.struts-config.xmlはワイルドカードを使用します.
いくつかのCRUDのアクションに対して、ワイルドカードを使ってもいいです.もしこのactionの中にあるactionの方法には特殊なルートがあります.コードの中で直接new Action Forward(「/foo.jsp」)が使えます.
<action path="/admin/*" name="{1}Form" parameter="method" scope="request" validate="false">
            <forward name="list" path="/WEB-INF/pages/admin/{1}List.jsp"/>
            <forward name="edit" path="/WEB-INF/pages/admin/{1}Form.jsp"/>
            <forward name="success" path="/admin/{1}.do?method=list" redirect="true"/>
</action>
4.Strutsメカニズムの簡略化された書き方に困らなくてもいいです.
いくつかの簡便で直接的な方法は、Strutsのメカニズムにあまり困らなくてもいいです.
4.1 struts-config.xmlにjspパスを配置しないで、直接コードの中でジャンプします.
いくつかの必要なコードの中で動的に綴じ込むパスに使用します.
return new ActionForward("/foo/bar.jsp");
or
return new ActionForward("/foo/bar.jsp",true);//redirect
4.2 jspを使わずに文字列を直接出力する
ActionForward execute(....){
    try {
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().write(text);
    } catch (IOException e) {
            log.error(e);
    }
    return null;
}
4.3.Struts Taglibに依存せず、ELはFormBen属性を直接出力する
普通のFormBen:$book Form.image
LazyValidatoForm:{book Form.map.image}
その中でbook FormはformBen名です.もう一つの出力属性の方式は、jodd-formを使用して、4.4 i 18 Nを使わずにMessageとErrorを使う
StrutsのアクションMessageはよく使われていますが、i 18 Nのkeyだけを入力パラメータとして受信して、古い定義i 18 nは面倒くさいです.一方で、message={0}を設定して、直接new Active Message(「message」、message);
5.究極化プロファイル--Struts Entityアクション
SpringSideパッケージのEntityCRUDActionは、CRUD動作を含むアクションごとに次のコードが必要です.詳細はSprigSideのStrutsパッケージを読んでください.
public class UserAction extends StrutsEntityAction<User,UserManager> {
 private UserManager userManager;
 public void setUserManager(UserManager userManager) {
 this.userManager = userManager;
 }
 }