ニコニコフレームワーク/アクションとJSPの作成

アクションの作成

アクションの基本的な実装方法

アクションはjp.sf.nikonikofw.action.IActionインターフェースを実装して作成します。

public class HelloAction implements IAction {
    @Override
    public String execute(HttpServletRequest requesr, HttpServletResponse response){
        request.setAttribute("message", "Hello World!");
        return "hello.jsp";
    }
}

execute()メソッドの戻り値にはフォワードするJSPを指定します。リダイレクトで別のアクションに遷移する場合はアクション内でresponse.sendRedirect()を呼び出した後、nullを返却します。

リクエストパラメータを受け取る

アクションにpublicフィールドを用意し、@Requestアノテーションをつけておくとフィールド名に一致するリクエストパラメータを受け取ることができます。フィールド名とリクエストパラメータの名前が異なる場合は受け取るパラメータ名を明示的に指定することもできます。

// フィールド名と同じパラメータを受け取る
@Request
public String userName;

// パラメータ名を明示的に指定して受け取る
@Request(name="id")
public Long userId

同じパラメータ名で複数のパラメータが送信される場合はString配列のフィールドで受け取ることができます。

// 複数のパラメータを受け取る
@Request
public String[] selectedValues;

@Requestのrequired属性をtrueにしておくと、パラメータの必須チェックを行うことができます。必須のフィールドに対応するパラメータが存在しないか、空文字列の場合はValidationExceptionがスローされます。

// 必須パラメータ
@Request(required=true)
public Long userId

認証

アクションクラスに@Authenticationアノテーションを付与することで、アクションの認証チェックを行うことができます。

@Authenticationを付与したアクションはログイン状態の場合のみアクセスすることができます。

// ログイン中のみアクセス可能
@Authentication
public class AdminOnlyAction implements IAction {
  ...
}

また、@Authenticationのadmin属性をtrueにすると管理者の場合のみアクセスすることができます。

// 管理者の場合のみアクセス可能
@Authentication(admin=true)
public class AdminOnlyAction implements IAction {
  ...
}

認証に失敗するとAuthenticationExceptionがスローされます。

ログインやログアウト処理を行うにはIAuthenticationManangerを使用します(ただし、Google App Engineの場合はGoogle App Engineで提供されているGoogleアカウント認証用ページにてログイン・ログアウト処理を行うため、以下の処理を行う必要はありません)。

IAuthenticationMananger manager = Config.getAuthenticationMananger();

// ログイン処理
UserInfo userInfo = new UserInfo();
manager.login(userInfo);

// ログアウト処理
manager.logout();

JSPの作成

アクションからフォワードされるJSPは普通のJSPとして作成します。ELやJSTLなどを活用するとよいでしょう。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://nikonikofw.sf.net/f" prefix="f" %>
<html>
  <head><title>テスト</title></head>
<body>
  <h1>${f:h(message)}</h1>
  <c:if test="${f:isLogin()}">
    ログイン中
  </c:if>
</body>
</html>

EL関数

JSPではニコニコフレームワークが提供するEL関数を使用することができます。利用可能なEL関数は以下の通りです。

関数説明
f:h()文字列のHTMLタグをエスケープします。
f:br()文字列の改行を<br>タグに変換します。
f:link()文字列に含まれるURLをリンクに変換します。
f:js()JavaScriptの文字列リテラルをエスケープします。
f:isLogin()ログインしている場合にtrue、していない場合にfalseを返します。
f:isAdmin()ログインしていて管理者であればtrue、ログインしていないか管理者でない場合はfalseを返します。