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

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

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

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

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

Q&A

解決済

1回答

6681閲覧

EL式で出力している箇所を、EL式を使わずにjavaのメソッドを呼びたい

t.y.

総合スコア13

JSP

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

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

0グッド

0クリップ

投稿2016/06/18 15:29

struts,jspのEL式を使っている箇所があるのですが、それをEL式を使わない形に変更するにはどのようにすればよいでしょうか?

具体的には、以下のようにしたいです。
<logic:iterate id="userBean" name="_userManagerForm" property="users">
<tr>
<td align="center">
<input type="text" name="gakunen" value="${userBean.id}">
</td>

<input type="text" name="gakunen" value="${userBean.id}">

の部分を
<input type="text" name="gakunen" value="userBean.getId(userBean.id)">
と言う風に変更したいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

一度メソッド実行結果を変数に格納したのち、<input>タグのvalueにセットする方法はいかがでしょうか?

JSP

1 2<% 3 int id = userBean.getId(userBean.id); 4%> 5678<input type="text" name="gakunen" value="<%= id %>"> 9

ソースコードを提示していただいた後の追記

terasoluna(struts+spring+iBatis)のフレームワーク環境なんですね。
過去に耳にしたことはあったのですが触れたことがなかったので、提示していただいたチュートリアルをローカル環境で検証いたしました。

環境 ※環境が異なるかもしれませんが、念のため

  • MacOS
  • Eclipse 4.5
  • Tomcat 8

「userBean.getId()」のようにIDを取得するには、userBeanをキャストしてあげる必要がありました。
userBeanは「SelectUserOutput」クラスですので、以下のようにキャストするとgetId()にてIDが取得できました。
いかがでしょうか?

  • list.jsp

JSP

1 <td align="center"> 2 <% out.println(((SelectUserOutput)userBean).getId()); %> 3 </td> 4

投稿2016/06/18 23:49

編集2016/06/19 15:08
takyafumin

総合スコア2335

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

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

t.y.

2016/06/19 01:21

ありがとうございます。 教えていただいた方法でERRORとなった為、問題を切り分ける為、以下のコードでやってみました。 <logic:iterate id="userBean" name="_userManagerForm" property="users"> <tr> <td align="center"> <% int id = userBean.id; %> <input type="text" name="gakunen" value="${userBean.id}"> </td> <td> [2016/06/19 10:18:45][ERROR][[action]] サーブレット action のServlet.service()が例外を投げました org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSPファイル: /userManager/list.jsp の中の66行目でエラーが発生しました userBean.id cannot be resolved or is not a field 63: <% 64: int id 65: = 66: userBean.id; 67: %> 68: <input type="text" name="gakunen" value="${userBean.id}"> 69: </td> Stacktrace: at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93) at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330) at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:451) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:328) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:307) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:565)
t.y.

2016/06/19 01:24

引数なしのメソッドがある為、切り分けの為、以下の方法もやってみました。 [2016/06/19 10:22:57][ERROR][[action]] サーブレット action のServlet.service()が例外を投げました org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSPファイル: /userManager/list.jsp の中の66行目でエラーが発生しました The method getId() is undefined for the type Object 63: <% 64: int id 65: = 66: userBean.getId(); 67: %> 68: <input type="text" name="gakunen" value="${userBean.id}"> 69: </td> Stacktrace: at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93) at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330) at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:451) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:328) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:307) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:565) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:309) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
t.y.

2016/06/19 01:39

これだと正しく動きましたので、コメントアウトしている箇所でインスタンスを取得できていない感じです。 <logic:iterate id="userBean" name="_userManagerForm" property="users"> <tr> <td align="center"> <% int id = 1; // userBean.getId(); %> <input type="text" name="gakunen" value="<%= id %>"> </td>
takyafumin

2016/06/19 02:38

logic iterate でuserBeanを参照しているので、意図しているインスタンスを参照できていないのかもしれませんね。 logic iterate をまずは使用せずに実装検証できますか?
t.y.

2016/06/19 04:19

調べながらやってみます。 出来れば、やり方のヒントを頂けるとありがたいです。
takyafumin

2016/06/19 06:59

JSPとbeanの全体像が見えないのでアドバイスが上手くできません。ソースを質問文にコードタグを用いて追記することはできますか?
t.y.

2016/06/19 11:10

list.jsp <%@ page contentType="text/html; charset=Windows-31J"%> <%@ taglib uri="/struts-html" prefix="html" %> <%@ taglib uri="/struts-bean" prefix="bean" %> <%@ taglib uri="/struts-logic" prefix="logic" %> <%@ taglib uri="/terasoluna-struts" prefix="ts" %> <%@ taglib uri="/terasoluna" prefix="t" %> <%@ taglib uri="/terasoluna-library" prefix="tl" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html:html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>一覧表示画面</title> </head> <body> <table border="0" style="width:100%;"> <tr> <td align="center"> <html:img module="/" page="/image/terasoluna_logo.gif" /> </td> </tr> <tr> <td align="center"> <h2> 一覧表示画面 </h2> </td> </tr> </table> <html:messages id="message" message="true"> <bean:write name="message"/> </html:messages> <ts:pageLinks id="userListPageLinks" action="/userManager/listBL" name="_userManagerForm" rowProperty="row" totalProperty="totalCount" indexProperty="startIndex" currentPageIndex="now" totalPageCount="total"/> <div style="text-align:center"> <h5> <bean:write name="now"/>/<bean:write name="total"/>(<bean:write name="_userManagerForm" property="totalCount"/>) <p> <bean:write name="userListPageLinks" filter="false"/> <p> <table align="center" frame="box" border="1"> <tr> <td width="30" align="center"><b>TEST</b></td> <td width="30" align="center"><b>ID</b></td> <td width="100" align="center"><b>NAME</b></td> <td width="30" align="center"><b>AGE</b></td> <td width="80" align="center"><b>BIRTH</b></td> </tr> <%-- <logic:iterate id="userBean" name="_userManagerForm" property="users"> --%> <tr> <td align="center"> <% out.println(_userManagerForm); %> <%-- <%= jp.terasoluna.thin.tutorial.web.usermanager.form.UserManagerForm %> --%> <%-- ${_userManagerForm.users} --%> </td> <%-- <td align="center"> --%> <%-- <input type="text" name="gakunen" value="${userBean.id}"> --%> <%-- </td> --%> <%-- <td> --%> <%-- <bean:write name="userBean" property="id"/> --%> <%-- </td> --%> <%-- <td> --%> <%-- <bean:write name="userBean" property="name"/> --%> <%-- </td> --%> <%-- <td align="center"> --%> <%-- <bean:write name="userBean" property="age"/> --%> <%-- </td> --%> <%-- <td align="right"> --%> <%-- <bean:write name="userBean" property="birth"/> --%> <%-- </td> --%> </tr> <%-- </logic:iterate> --%> </table> <p> <bean:write name="userListPageLinks" filter="false"/> </p> </h5> </div> <hr> <ts:link page="/logon/menuSCR.do">メニュー</ts:link> </body> </html:html>
t.y.

2016/06/19 11:11

<!-- ======================================== フォームビーン定義 --> <form-beans> <!-- ユーザ管理用アクションフォーム --> <form-bean name="_userManagerForm" type="jp.terasoluna.thin.tutorial.web.usermanager.form.UserManagerForm" /> </form-beans>
t.y.

2016/06/19 11:12

/* * Copyright (c) 2007 NTT DATA Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jp.terasoluna.thin.tutorial.web.usermanager.form; import java.util.List; import jp.terasoluna.fw.web.struts.form.ValidatorActionFormEx; import jp.terasoluna.thin.tutorial.web.usermanager.vo.SelectUserOutput; /** * ユーザー管理業務で使用するアクションフォーム。 * */ public class UserManagerForm extends ValidatorActionFormEx { /** * シリアルバージョンID。 */ private static final long serialVersionUID = 1L; /*登録画面で使用する*/ /** * ユーザID。 */ private Long id = null; /** * ユーザ名。 */ private String name = null; /** * 年齢。 */ private String age = null; /** * 生年月日。 */ private String birth = null; /*一覧画面で使用する*/ /** * 表示行数。 */ private String row = "10"; /** * 開始インデックス。 */ private String startIndex ="0"; /** * 全件数。 */ private String totalCount = null; /** * 表示用ユーザリスト。 */ private List<SelectUserOutput> users = null; /** * ユーザIDを返却する。 * * @return 保持するユーザID */ public Long getId() { return id; } /** * ユーザIDを設定する。 * * @param id ユーザID */ public void setId(Long id) { this.id = id; } /** * ユーザ名を返却する。 * * @return 保持するユーザ名 */ public String getName() { return name; } /** * ユーザ名を設定する。 * * @param name ユーザ名 */ public void setName(String name) { this.name = name; } /** * 年齢を返却する。 * * @return 保持する年齢 */ public String getAge() { return age; } /** * 年齢を設定する。 * * @param age 年齢 */ public void setAge(String age) { this.age = age; } /** * 生年月日を返却する。 * * @return 保持する生年月日 */ public String getBirth() { return birth; } /** * 生年月日を設定する。 * * @param birth 生年月日 */ public void setBirth(String birth) { this.birth = birth; } /** * 表示行数を返却する。 * @return 表示行数 */ public String getRow() { return row; } /** * 開始インデックスを返却する。 * @return 開始インデックス */ public String getStartIndex() { return startIndex; } /** * 開始インデックスを設定する。 * @param startIndex 開始インデックス */ public void setStartIndex(String startIndex) { this.startIndex = startIndex; } /** * 全件数を返却する。 * @return 全件数 */ public String getTotalCount() { return totalCount; } /** * 全件数を返却する。 * @param totalCount 全件数 */ public void setTotalCount(String totalCount) { this.totalCount = totalCount; } /** * 表示用ユーザリストを返却する。 * @return 表示用ユーザリスト */ public List<SelectUserOutput> getUsers() { return users; } /** * 表示用ユーザリストを設定する。 * @param users 表示用ユーザリスト */ public void setUsers(List<SelectUserOutput> users) { this.users = users; } }
t.y.

2016/06/19 11:12

/* * Copyright (c) 2007 NTT DATA Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jp.terasoluna.thin.tutorial.web.usermanager.vo; import java.io.Serializable; /** * ユーザ情報保持Bean。 * * データベースからの取得時、画面からの入力時に使用される。 * */ public class SelectUserOutput implements Serializable { /** * シリアルバージョンID。 */ private static final long serialVersionUID = 161610379384156463L; /** * ID。 */ private Long id = null; /** * 名前。 */ private String name = null; /** * 年齢。 */ private String age = null; /** * 生年月日。 */ private String birth = null; /** * IDを返却する。 * * @return 保持するID */ public Long getId() { return id; } /** * IDを設定する。 * * @param id ID */ public void setId(Long id) { this.id = id; } /** * 名前を返却する。 * * @return 保持する名前 */ public String getName() { return name; } /** * 名前を設定する。 * * @param name 名前 */ public void setName(String name) { this.name = name; } /** * 年齢を返却する。 * * @return 保持する年齢 */ public String getAge() { return age; } /** * 年齢を設定する。 * * @param age 年齢 */ public void setAge(String age) { this.age = age; } /** * 生年月日を返却する。 * * @return 保持する生年月日 */ public String getBirth() { return birth; } /** * 生年月日を設定する。 * * @param birth 生年月日 */ public void setBirth(String birth) { this.birth = birth; } }
t.y.

2016/06/19 11:12

/* * Copyright (c) 2007 NTT DATA Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jp.terasoluna.thin.tutorial.web.usermanager.blogic; import java.util.List; import jp.terasoluna.fw.dao.QueryDAO; import jp.terasoluna.fw.service.thin.BLogic; import jp.terasoluna.fw.service.thin.BLogicResult; import jp.terasoluna.thin.tutorial.web.usermanager.dto.ListInput; import jp.terasoluna.thin.tutorial.web.usermanager.dto.ListOutput; import jp.terasoluna.thin.tutorial.web.usermanager.vo.SelectUserOutput; /** * 一覧データを取得するビジネスロジック。 * */ public class ListBLogic implements BLogic<ListInput> { /** * QueryDAO。 * Springによりインスタンス生成され設定される。 */ private QueryDAO queryDAO = null; /** * 一覧データ取得処理を行う */ public BLogicResult execute(ListInput param) { String strIndex = param.getStartIndex(); String strRow = param.getRow(); int startIndex = 0; int row = 10; if (strIndex != null) { startIndex = Integer.parseInt(strIndex); } if (strRow != null) { row = Integer.parseInt(strRow); } //件数を取得する String totalCount = queryDAO.executeForObject("getUserCount", null, String.class); //一覧データを取得する List<SelectUserOutput> users = queryDAO.executeForObjectList("getUsers", null, startIndex, row); //ビジネスロジックの出力クラスに結果を設定する ListOutput output = new ListOutput(); output.setUsers(users); output.setTotalCount(totalCount); BLogicResult result = new BLogicResult(); result.setResultObject(output); result.setResultString("success"); return result; } /** * QueryDAOを設定する。 * @param queryDAO */ public void setQueryDAO(QueryDAO queryDAO) { this.queryDAO = queryDAO; } }
t.y.

2016/06/19 11:14

ありがとうございます。 勉強になります。 JSP,このサイトの使い方とも、まだ慣れていない為、色々ご迷惑おかけしてます。 不足があれば、ご指摘お願いします。
takyafumin

2016/06/19 11:57

コメント欄ですとソースコードがたいへん読みづらいため、『ソースを質問文にコードタグを用いて追記することはできますか?』 また可能な限り不要な記述を除いていただけると確認の手間が省けます。 ご検討ください。
takyafumin

2016/06/19 12:15

すみません、ソースコードを見ていて当初の質問の意図が分からなくなりました。 > <input type="text" name="gakunen" value="${userBean.id}"> の部分を > <input type="text" name="gakunen" value="userBean.getId(userBean.id)"> と言う風に変更したいです。 上記については、『userBean(SelectUserOutput)』には『getId(int)』のメソッドが定義されていないため、そもそも実行は出来ないかと思います。 またコメントアウト(のようになっている?)されている『<bean:write name="userBean" property="id"/>』という記述でidの出力は可能かと思います。 (${}という形式を利用しない書き方) どのようなことをされたいのでしょうか?
takyafumin

2016/06/19 15:02

「userBean.getId()」というようにIDの取得をしたい、と解釈して検証してみました。 ここだと読みづらいかもしれないため、回答に追記します。 見当違いのようでしたらご指摘ください。
t.y.

2016/06/19 15:22

ありがとうございます パソコンが手元にないので、一部だけ先に返答させてもらいます 引数付きのメソッドを作った後、その引数付きのメソッドをjspから呼び、それをinput type="text"のvalueに設定したいです また、引数には、userBeanのidを設定したいです。 かなり勉強になって、助かっています。
t.y.

2016/06/19 15:25

すみません コードタグを使って、質問欄にソースを書くやり方が分からず、コメント欄に書いてしまいました
t.y.

2016/06/20 09:57

解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問