2007 年 5 月 6 日 23 時 33 分

ルール編集画面を表示する


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


[写真]


ルール編集画面は、ルール追加画面とほとんど同じなので、
edit-rule.jsp を流用することにしよう。

1 つの View を追加と編集に使う場合、
画面の一部分の表示を変えなければならない。
例えば、HTML のタイトルや、見出し部分だ。

これを実現するためには、JSP で追加か編集かを区別し、
出力する HTML を変える必要がある。

Logic タグライブラリを使えば、
リクエストやアプリケーション等の属性を元に、
JSP 内で条件分岐を行うことができる。

では、edit-rule.jsp を書き換えてみよう。

========== /WEB-INF/pages/filter/edit-rule.jsp ==========
<?xml version="1.0" encoding="UTF-8" ?>

<%@ page contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" %>

<%@ taglib prefix="html"
        uri="http://struts.apache.org/tags-html" %>
<%@ taglib prefix="logic"
        uri="http://struts.apache.org/tags-logic" %>
(…省略…)
<logic:present name="filterRuleForm">
    <title>パケットフィルタ: ルールの編集</title>
</logic:present>
<logic:notPresent name="filterRuleForm">
    <title>パケットフィルタ: ルールの追加</title>
</logic:notPresent>
</head>

<body>
<logic:present name="filterRuleForm">
    <h1>パケットフィルタ: ルールの編集</h1>
</logic:present>
<logic:notPresent name="filterRuleForm">
    <h1>パケットフィルタ: ルールの追加</h1>
</logic:notPresent>
    <html:form action="/filter/update-rule">
(…省略…)
    </html:form>
</body>

</html:html>
========== end of /WEB-INF/pages/filter/edit-rule.jsp ==========

View で、追加か編集かを識別するために、
filterRuleForm リクエスト属性を使う。

「追加」で遷移してきた場合は、
filterRuleForm 属性値がまだ存在しないので、
この属性が存在するかどうかを調べれば良い。

これには、<logic:present> 要素を使う。
<logic:present> は、指定した調べる対象が、
存在するかどうか (非 null か)を調べ、
要素の内容は、値が存在した場合のみ出力される。

調べる対象は、毎度お馴染みの属性で指定する。
name と property 属性だ。property は省略可能。

name だけを指定した場合、属性値自身が、
name と property を指定した場合は、
name で指定した名前の属性値に含まれるオブジェクトの、
property で指定したプロパティの値が調べられる。

<logic:notPresent> はその逆だ。
要素の内容は、値が存在しない場合のみ出力される。

今回はこれらを使って分岐してみた。

注意点としては、filterRuleForm 属性が、
<html:form> タグによって自動的に生成されることだ。

<html:form> は、action 属性に指定されたパスによって、
必要な Form Bean のインスタンスを生成するので、
<logic:present>、<logic:notPresent> を使えるのは、
<html:form> よりも手前だけということになる。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.