前述の例ではハイパーリンクを利用した画面遷移方法を紹介したが、WebアプリケーションではHTMLフォームを用意し、入力したデータをサブミットしたい場合がある。その場合は次のように実装する。
JSPページは、netui:form タグを使って下記のようにフォームを実装する。フォームのサブミット先は、アクションメソッドだ。下記は、name、ageというパラメータを送信する2つのテキストボックスと送信ボタンを実装したシンプルな実装例だ。
<%@ page language="java" contentType="text/html;charset=UTF-8"%> <%@ taglib uri="http://beehive.apache.org/netui/tags-html-1.0" prefix="netui"%> <netui:html> <head> <title>page2.jsp</title> <netui:base/> </head> <netui:body> <p> Welcome to page2.jsp! </p> <p> <netui:form action="processData"> <p>Name:<netui:textBox dataSource="actionForm.name"/> <p>Age:<netui:textBox dataSource="actionForm.age"/> <p><netui:button type="submit">Submit</netui:button> </netui:form> </p> </netui:body> </netui:html>
jpfファイルには、org.apache.beehive.netui.pageflow.FormData を継承したstaticクラスを実装し、これを引数に取るアクションメソッドを実装する。
import org.apache.beehive.netui.pageflow.Forward;
import org.apache.beehive.netui.pageflow.PageFlowController;
import org.apache.beehive.netui.pageflow.annotations.Jpf;
import org.apache.beehive.netui.pageflow.FormData;
@Jpf.Controller
public class Controller extends PageFlowController
{
@Jpf.Action(
forwards={
@Jpf.Forward(name="success", path="index.jsp")
}
)
public Forward begin()
{
return new Forward("success");
}
@Jpf.Action(
forwards={
@Jpf.Forward(name="success", path="page2.jsp")
}
)
public Forward toPage2()
{
return new Forward("success");
}
@Jpf.Action(
forwards = {
@Jpf.Forward(name = "success", path = "page2.jsp")
}
)
public Forward processData(ProcessDataForm form)
{
System.out.println("Name: " + form.name);
System.out.println("Age: " + form.age);
return new Forward("success");
}
public static class ProcessDataForm extends FormData
{
private int age;
private String name;
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return this.age;
}
}
}
このように実装し、フォームをサブミットするとアクションメソッドprocessDataが呼ばれ、メソッドの引数に入力値を保持するBeanが渡される。
また、下記の例のようにアクションメソッド中では、getRequest()メソッドでHttpServletRequestオブジェクトを取得できるので、requestスコープ、sessionスコープなどに任意のオブジェクトを格納することも可能だ。
例:getRequest().setAttribute("data", object);
Copyright © ITmedia, Inc. All Rights Reserved.