*** ApplicationResources.properties にアクセスする <bean:message key="app.title"/> *** タグをxhtmlに対応する デフォルトでは、Strutsのタグはxhmlに対応していない(閉じタグとか)。 <html:html xhtml="true"> とすることで、xhtml形式のタグを出力します。 *** 初期アクセスのパラメタエラーを回避する たとえば何かを検索する画面(JSP)で、最初にその画面を開いたときは検索パラメータがのってませんよね。検索パラメータを画面に表示している場合、最初のアクセスだけエラーにならないようなロジックが必要になりそうですが、こんな回避法がありました。何のことはない、パラメタチェックを入れているだけですが、こんな感じでやるとキレイになりますね。 こちらは検索側の記述 <html:form action="/search"> <html:text property="input" /> <html:submit>送信</html:submit> </html:form> こちらが表示側の記述 <logic:present name="input"> 入力値: <bean:write name="input" /> </logic:present> ちなみに、下のinputはrequest.getParameter("input");ではなく、xxxx.getAttribute("input")((xxxxはrequestとか、sessionとかいろいろ));であることに注意。 ***直接JSPを呼ばないで、下記の形式で呼ぶようにする。 <action path="/forward" parameter="/WEB-INF/jsp/index.jsp" type="org.apache.struts.actions.ForwardAction" /> **validateの使用方法 FormBeanのvalidateメソッドを実装する。 public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){ ActionErrors errors = new ActionErrors(); //ユーザIDが空だったら if(userId==null || userId.length()==0){ ユーザIDのテキストボックスでエラーが発生した、エラー文言は「ユーザID」 errors.add("userId",new ActionError("errors.required","ユーザID")); } return errors; } errors.add("userId",new ActionError("errors.required","ユーザID"));の意味は~ userIdが、<html:errors property="userId"/>に対応し、"errors.required"がプロパティファイルに対応し"ユーザID"が、{0}に対応する。 ApplicationResources.propertiesに下記内容を追加(ファイルは/WEB-INF/classesにある) errors.header=<hr><font color="red"><h3>ERROR</h3> errors.footer=<hr></font> errors.required={0} Required ← {0}にerrors.addでセットした文言が入る。 struts-config.xml のActionで <action path="/user_regist" type="kino.action.UserRegistAction" name="userRegistForm" scope="request" attribute="userRegistForm" input="/regist.jsp"> のようにエラー遷移先(/regist.jsp)を指定する まとめると、errors.add("userId",new ActionError("errors.required","ユーザID")); で、errors.required={0} Required の{0}をユーザIDで置換して ユーザID Required となる **リンクタグでの、パラメータ指定方法 <% Map map=new HashMap(); map.put("data1","value1"); map.put("data2","value2"); map.put("data3","value3"); map.put("data4","value4"); request.setAttribute("map",map); %> <html:link page="/execute.do" name="map">aaaa</html:link> みたく、mapを指定すると、パラメータとなる。(nameでBeanを指定、propertyでmapを指定してもよい。) ***サンプル struts-config.xml <form-beans> <form-bean name="testForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="name" type="java.lang.String" /> <form-property name="word" type="java.lang.String" /> </form-bean> </form-beans> <action-mappings> <action name="testForm" path="/test" scope="request" type="kino.action.TestAction"> <forward name="success" path="/WEB-INF/jsp/Test.jsp"> </forward> </action> </action-mappings> につき <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <html:html> <HEAD> <%@ page language="java" contentType="text/html; charset=SHIFT_JIS" pageEncoding="SHIFT_JIS" %> <META http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS"> <META name="GENERATOR" content="IBM WebSphere Studio"> <TITLE>Test.jsp</TITLE> </HEAD> <BODY> <html:form action="/test"> <html:text property="name" /> <br /> <html:text property="word" /> <html:submit>送信</html:submit> </html:form> <logic:present name="name"> <bean:write name="name" /> </logic:present> <br /> <logic:present name="word"> <bean:write name="word" /> </logic:present> </BODY> </html:html> ***転送サンプル struts-config.xml: <action-mappings> <action path="/forward" type="org.apache.struts.actions.ForwardAction" parameter="/WEB-INF/jsp/Test.jsp"></action> </action-mappings> で、forward.do でTest.jspに転送される。 ---- -メモ書きなので、つたない内容です。ご了承下さい。コメントがありましたらお願いします。 -- [[きの]] &new{2004-01-08 (木) 18:33:31}; #comment #navi(Struts) SIZE(10){現在のアクセス:&counter;}