java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

JSTLのCoreライブラリのsetを使う

投稿日:

最終更新日:2016年10月06日

アイキャッチ

こんにちは。「Javaを復習する初心者」です。

JSPでJSTLというライブラリを使ってみました。今回はsetタグを試しました。

JSTL(JSP Standard Tag Library)というライブラリにはカスタムタグが定義されています。このライブラリを使うためには以下のjarファイルが必要です。

  • javax.servlet.jsp.jstl-1.2.1.jar
  • javax.servlet.jsp.jstl-api-1.2.1.jar

setタグ

JSTLに定義されているカスタムタグはいくつかのカスタムライブラリでまとめられているようです。今回はCoreライブラリのsetタグを使ってみました。

以下は「Hello World.」を出力するjspファイルです。

jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="Hello" value="Hello World." />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>test</title>
</head>
<body>

${Hello}

</body>
</html>

「@ taglib」ディレクティブの「prefix=”c” uri=”http://java.sun.com/jsp/jstl/core”」の記述はcoreタグをcというプレフィックスで使うための記述です。「c:set」という記述をすることができます。

c:setタグで「Hello World.」という値を変数Helloに格納しています。「${Hello}」で出力ができるようです。

リクエストスコープから値を設定

リクエストスコープから値を設定することができるようです。以下は、リクエストスコープの配列をsetタグで格納しています。

jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

String[] strs = {"a", "b"};
request.setAttribute("strs", strs);

%>

<c:set var="myStrs" value="${strs}" />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>test</title>
</head>
<body>

${myStrs[0]}<br>
${myStrs[1]}<br>

</body>
</html>

配列の要素を出力する場合、「${myStrs[0]}」というように要素番号を指定できます。

DTOを使う

最後に、DTOクラスを作って実験してみました。以下のDTOを使って格フィールドの値を出力してみました。

DTO

package dto;

public class Person {

    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

}

使ったJSPファイルは以下です。

JSP

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="dto.Person"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

Person person = new Person("name1", 21);
request.setAttribute("person", person);

%>

<c:set var="myPerson" value="${person}" />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>test</title>
</head>
<body>

${myPerson.name}<br>
${myPerson.age}<br>

</body>
</html>

リクエストスコープにPersonクラスのインスタンスを格納しています。setタグで変数myPersonにリクエストスコープのpersonを設定しています。この場合、「${myPerson.name}」のようにしてフィールドの値を表示することができるようです。内部的にはフィールドに対するゲッターが使われているようです。ゲッターをコメントアウトすると500エラーが表示されました。