トップ 新規 編集 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

JSPの応用:簡単なアンケート

JSPの応用:簡単なアンケート

 旅先アンケート

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%!
  String[] candidate = { "北海道", "東北", "上越", "関東", "東海",
              "中部", "四国", "九州", "沖縄", "海外"
            }; //各候補
  int[] vote = new int[candidate.length];  //各候補の得票数
%>
<%
  int sum = 0;
  for(int i=0;i<candidate.length;i++) {
    if(request.getParameter(""+i)!=null) {  //どの候補に票が入っているか
      vote[i]++;
    }
    sum+=vote[i];  //ついでに全票数も計算
  }
%>
<html>
    <head>
        <title>旅行アンケート</title>
    </head>
    <body>
        旅行に行くとしたらどこ?
        <form method="post" action="<%=request.getRequestURI() %>">
<%
    for(int i=0;i<candidate.length;i++) {
%>
        <%=candidate[i]%> (票数:<%=vote[i]%>)
        <input type="submit" name="<%=i%>" value="投票">
        <hr align="left" size=10 noshade="noshade" width="<%=(sum>0)?(vote[i]*100/sum):0 %>%">
        <%-- 各票数を全票数で割った百分率を罫線タグの幅に適用することでグラフを表現 --%>
<%
    }
%>
            <input type="submit" value="更新"> 現在の投票総数:<%=sum %>票
        </form>
    </body>
</html>

 汎用アンケート

  • 旅先アンケートと基本は同じであるが、アンケート名の設定、候補の追加などを加えることで、汎用性のあるアンケートフォームとしたもの
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.util.Map"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%!
Enquete enquete = new Enquete();
public class Enquete {
    private int totalVote;
    private String title=null;
    private Map<String,Integer> candidates = new java.util.TreeMap<String,Integer>();
    public int getTotalVote() {
        return totalVote;
    }
    public void setTotalVote(int totalVote) {
        this.totalVote = totalVote;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public Map<String, Integer> getCandidates() {
        return candidates;
    }
    public void setCandidates(Map<String, Integer> candidates) {
        this.candidates = candidates;
    }
    public void addCandidate(String candidate) {
        candidates.put(candidate,0);
    }
    public void addVote(String candidate) {
        candidates.put(candidate,candidates.get(candidate)+1);
        totalVote++;
    }
}
%>
<%
    request.setCharacterEncoding("utf-8");
    pageContext.setAttribute("enquete",enquete);
    if(request.getParameter("title")!=null) {
        enquete.setTitle(request.getParameter("title"));
    }
%>
<html>
    <head>
        <title>アンケート ${enquete.title}</title>
    </head>
    <body>
        <c:if test="${empty enquete.title}">
            <form method="post" action="${pageContext.request.requestURI}">
                アンケートのタイトルはどうしますか?
                <input type="text" name="title" />
                <input type="submit" name="" value="投稿" />
            </form>
        </c:if>
        <c:if test="${!empty enquete.title}">
            <c:if test="${!empty param.new}">
                <%    enquete.addCandidate(request.getParameter("new")); %>
            </c:if>
            <c:forEach var="c" items="${enquete.candidates}">
                <c:if test="${!empty param[c.key]}">
                    <%    enquete.addVote((String)((Map.Entry)pageContext.findAttribute("c")).getKey());    %>
                </c:if>
            </c:forEach>
            <form method="post" action="${pageContext.request.requestURI}">
                ${enquete.title}<br />
                <c:forEach var="c" items="${enquete.candidates}">
                    ${c.key} (票数:${c.value})
                    <input type="submit" name="${c.key}" value="投票">
                    <hr align="left" size=10 noshade="noshade" width="${(enquete.totalVote>0)?(c.value*100/enquete.totalVote):0}%">
                    <%-- 各票数を全票数で割った百分率を罫線タグの幅に適用することでグラフを表現 --%>
                </c:forEach>
                新しい候補:
                <input type="text" name="new" />
                <input type="submit" value="追加"><br />
                現在の投票総数:${enquete.totalVote}票
            </form>
        </c:if>
    </body>
</html>

 課題

  1. 汎用的なアンケートを改造して、投票数のパーセントが表示されるようにしなさい(/kadai/10-01vote.jsp)
    • 可能であれば、JSTLの<fmt:formatNumber>を用いて小数点が1桁で表示されるようにしなさい。(例:「33.333333%」ではなく「33.3%」というように)

最終更新時間:2007年12月06日 12時11分50秒