質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1687閲覧

JSP JSTL式のエラー

Chandler_Bing

総合スコア673

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/03/05 14:21

以下が現在では作成中のJSPファイルですがコメントアウトしているHTTMLのスクリプト内でエラーがでます。
いまいはっきりとJavaコードの埋め込み方がわかっていません。以下に調べた結果を記述します。

スクリプトレット(HTMLが始まる前)にJavaのコードを記述する場合は <% Javaのコード %>
HTML内にJavaのコードを埋め込む場合は <%= 変数や演算式 %>
EL式を使用すると、インポートやセッションを記述することなくセッションの値を使用できる
EL式で条件分岐等を行う為にJSTLを使用する。

★質問❶
問題のこの部分はどう記述すれば良いのでしょうか。<%=%>もc:cutもエスケープの問題だけで動きは同じとありました。
またこのvarは変数なのでしょうか。

<c:forEach var="i" begin="<%= first %>" end="<%= last %>" step="1"> <a class="btn" href="/JavaEnglish/LoginServlet?currentpage=<%= i %>"><c:out value="${i}" /></a><!--変数に解決できない--> </c:forEach>

★質問❷

<a class="last" href="/JavaEnglish/LoginServlet?currentpage=<%= maxpage %>">最後</a><!--構文エラー-->

はどこが間違えておりますか。

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4<%@ page import="java.util.List" %> 5<%@ page import="dao.JavaEnglishDAO"%> 6<%@ page import="model.Student"%> 7<%@ page import="model.Teacher"%> 8 9<% 10 int maxpage = (Integer) session.getAttribute("maxpage"); 11 int currentpage = (Integer) session.getAttribute("currentpage"); 12 int tppage = 5; 13 int btnlimt = 5; 14 int last; 15 int first; 16 int next; 17 int prev; 18 19 //maxpqgeが表示できる最大のボタン数(btnlimt)を越えている場合 20 if (maxpage > btnlimt) { 21 last = btnlimt; 22 if (currentpage < 4) { 23 first = 1; 24 last = btnlimt; 25 next = currentpage + 1; 26 if (currentpage == 1) { 27 prev = currentpage; 28 } else { 29 prev = currentpage - 1; 30 } 31 } else if (maxpage - 2 >= currentpage && currentpage >= 4) { 32 last = currentpage + 2; 33 first = currentpage - 2; 34 next = currentpage + 1; 35 prev = currentpage - 1; 36 } else if (maxpage - 2 < currentpage) { 37 last = maxpage; 38 first = maxpage - 4; 39 prev = currentpage - 1; 40 if (currentpage == maxpage) { 41 next = maxpage; 42 } else { 43 next = maxpage + 1; 44 } 45 } 46 //maxpqgeが1の場合 47 } else if (maxpage == 1) { 48 last = 1; 49 first = 1; 50 next = 1; 51 prev = 1; 52 //maxpageが2以上5以下の場合 53 } else if (!(maxpage > btnlimt) && maxpage > 1) { 54 last = maxpage; 55 first = 1; 56 if (currentpage == 1) { 57 prev = currentpage; 58 } else { 59 prev = currentpage - 1; 60 } 61 if (currentpage == maxpage) { 62 next = maxpage; 63 } else { 64 next = maxpage + 1; 65 } 66 } 67%> 68 69 70 71<!DOCTYPE html> 72<html lang="en" dir="ltr"> 73 74<head> 75<meta charset="utf-8"> 76<title>Javaでの練習です</title> 77<link rel="stylesheet" href="style.css"> 78</head> 79 80<body> 81 <div class="main"> 82 83 <div class="container"> 84 85 <div class="student"> 86 <p class="name"> 87 ナマエ: 88 <c:out value="${student.studentname}" /> 89 </p> 90 <p class="plan"> 91 プラン: 92 <c:out value="${student.studentplan}" /> 93 </p> 94 </div> 95 96 <div class="teachers"> 97 <h3>先生を確認しましょう</h3> 98 <c:forEach var="item" items="${teachers}"> 99 <div class="teacher"> 100 <p class="name"> 101 NMAE: 102 <c:out value="${item.teachername}" /> 103 </p> 104 <p class="sex"> 105 SEX: 106 <c:out value="${item.sex}" /> 107 </p> 108 <p class="major"> 109 NMAE: 110 <c:out value="${item.major}" /> 111 </p> 112 </div> 113 </c:forEach> 114 </div> 115 </div> 116 117 </div> 118 119 <div class="btnwrap"> 120 <div class="container"> 121 <c:if test="${currentpage > 1}"> 122 <a class="top" href="/JavaEnglish/LoginServlet?currentpage=1">最初</a> 123 <a class="prev" href="/JavaEnglish/LoginServlet?currentpage=<%= prev %>">前</a> 124 </c:if> 125 126 <c:forEach var="i" begin="<%= first %>" end="<%= last %>" step="1"> 127 <a class="btn" href="/JavaEnglish/LoginServlet?currentpage=<%= i %>"><c:out value="${i}" /></a><!--変数に解決できない--> 128 </c:forEach> 129 130 <c:if test="${maxpage == currentpage}"> 131 <a class="next" href="/JavaEnglish/LoginServlet?currentpage=<%= next %>">次</a> 132 <a class="last" href="/JavaEnglish/LoginServlet?currentpage=<%= maxpage %>">最後</a><!--構文エラー--> 133 </c:if> 134 135 </div> 136 </div> 137 138</body> 139 140</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問2ついては、まったくの丸投げ質問であるため回答しません。

質問1について、

JSTLで参照できる変数は、JSPの宣言部 <%! %> で定義した変数である必要があります。そのため、以下のような記載になります。

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" isELIgnored="false"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 4<!DOCTYPE html> 5<html> 6<body> 7<%! 8 int first = 0; 9 int last = 99; 10%> 11<c:forEach var="i" begin="<%= first %>" end="<%= last %>" step="1">

このように値の宣言や参照が面倒になるので、JSTLではEL式を使って変数を扱うのが良いでしょう。
EL式を使えば、

jsp

1<a class="btn" href="/JavaEnglish/LoginServlet?currentpage=${i}"><c:out value="${i}" /></a>

と簡単に記載できます。

投稿2019/03/05 16:36

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chandler_Bing

2019/03/05 17:11

ありがとうございます。 回答について質問があります。 ❶ >JSTLで参照できる変数は、JSPの宣言部 <%! %> で定義した変数である必要があります。そのため、以下のような記載になります。 これには当然セッションも含まれていますよね。 ❷ <a class="btn" href="/JavaEnglish/LoginServlet?currentpage=${i}"><c:out value="${i}" /></a> ですがaタグの中に記述する際は、c:out(JSTL)や<%=%>も使ってはいけないのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問