Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(Tomcat5.0から6.0へバージョンアップにてJSPの値が取得できなくなった)
閲覧数:2002
掲示板(Tomcat5.0から6.0へバージョンアップにてJSPの値が取得できなくなった)
名前
題名 Tomcat5.0から6.0へバージョンアップにてJSPの値が取得できなくなった
質問内容

質問を評価する
(0ポイント)
Tomcatのバージョンを上げると一桁の値だとデータが
JSPからServletにわたらない現象が発生して困っていま
す。

二桁以上だと正常に渡るのですが。

[環境]
<Tomcat>
旧:5.0.28
新:6.0.35

<Struts>
1.1

<Java>
旧:1.5.0.06
新:1.5.0.22

[ソース]
<JSPのソース>
<html:select name="commonForm" property="sinseiM" 
onchange="setDay(this)">
    <html:option value="
<%=Integer.toString(iwk)%>"><%=iwk%></html:option>
</html:select>月

<Javaのソース>
public class CommonForm extends ActionForm{

public void setSinseiM(int sinseiM){
    this.sinseiM = sinseiM;
}


同様の事象が発生した方いらしたら対処方法をご教授お
願い致します。

質問日時 2012-10-04 15:45:06
名前
匿名
回答内容

回答を評価する
(0ポイント)
<html:select name="commonForm" property="sinseiM" 
onchange="setDay(this)">
    <html:option value="
<%=iwk%>"><%=Integer.toString(iwk)%></html:option>
</html:select>月

ではだめですか?
何も試してないですが。
回答日時 2012-10-04 21:15:43
名前
回答内容

回答を評価する
(0ポイント)
ご教授ありがとうございます。

〜*〜
html:option value="<%=iwk%>
〜*〜
上記のように変更しましたが、以下のエラーが出まし
た。


Stacktrace:
    at 
org.apache.jasper.compiler.DefaultErrorHandler.jav
acError(DefaultErrorHandler.java:92)
    at 
org.apache.jasper.compiler.ErrorDispatcher.javacEr
ror(ErrorDispatcher.java:330)
    at 
org.apache.jasper.compiler.JDTCompiler.generateCla
ss(JDTCompiler.java:439)
    at 
org.apache.jasper.compiler.Compiler.compile(Compil
er.java:356)
    at 
org.apache.jasper.compiler.Compiler.compile(Compil
er.java:334)
    at 
org.apache.jasper.compiler.Compiler.compile(Compil
er.java:321)
    at 
org.apache.jasper.JspCompilationContext.compile(Js
pCompilationContext.java:592)
    at 
org.apache.jasper.servlet.JspServletWrapper.servic
e(JspServletWrapper.java:328)
    at 
org.apache.jasper.servlet.JspServlet.serviceJspFil
e(JspServlet.java:313)
    at 
org.apache.jasper.servlet.JspServlet.service(JspSe
rvlet.java:260)
    at 
javax.servlet.http.HttpServlet.service(HttpServlet
.java:717)
    at 
org.apache.catalina.core.ApplicationFilterChain.in
ternalDoFilter(ApplicationFilterChain.java:290)
    at 
org.apache.catalina.core.ApplicationFilterChain.do
Filter(ApplicationFilterChain.java:206)
    at 
org.apache.catalina.core.ApplicationDispatcher.inv
oke(ApplicationDispatcher.java:646)
    at 
org.apache.catalina.core.ApplicationDispatcher.pro
cessRequest(ApplicationDispatcher.java:436)
    at 
org.apache.catalina.core.ApplicationDispatcher.doF
orward(ApplicationDispatcher.java:374)
    at 
org.apache.catalina.core.ApplicationDispatcher.for
ward(ApplicationDispatcher.java:302)
    at 
org.apache.struts.action.RequestProcessor.doForwar
d(RequestProcessor.java:1069)
    at 
org.apache.struts.action.RequestProcessor.internal
ModuleRelativeForward(RequestProcessor.java:1012)
    at 
org.apache.struts.action.RequestProcessor.processF
orward(RequestProcessor.java:582)
    at 
org.apache.struts.action.RequestProcessor.process(
RequestProcessor.java:260)
    at 
org.apache.struts.action.ActionServlet.process(Act
ionServlet.java:1482)
    at 
org.apache.struts.action.ActionServlet.doGet(Actio
nServlet.java:507)
    at 
javax.servlet.http.HttpServlet.service(HttpServlet
.java:617)
    at 
javax.servlet.http.HttpServlet.service(HttpServlet
.java:717)
    at 
org.apache.catalina.core.ApplicationFilterChain.in
ternalDoFilter(ApplicationFilterChain.java:290)
    at 
org.apache.catalina.core.ApplicationFilterChain.do
Filter(ApplicationFilterChain.java:206)
    at 
org.apache.catalina.core.StandardWrapperValve.invo
ke(StandardWrapperValve.java:219)
    at 
org.apache.catalina.core.StandardContextValve.invo
ke(StandardContextValve.java:191)
    at 
org.apache.catalina.core.StandardHostValve.invoke(
StandardHostValve.java:127)
    at 
org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:102)
    at 
org.apache.catalina.core.StandardEngineValve.invok
e(StandardEngineValve.java:109)
    at 
org.apache.catalina.connector.CoyoteAdapter.servic
e(CoyoteAdapter.java:293)
    at 
org.apache.coyote.http11.Http11Processor.process(H
ttp11Processor.java:859)
    at 
org.apache.coyote.http11.Http11Protocol$Http11Conn
ectionHandler.process(Http11Protocol.java:602)
    at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(
JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:595)
回答日時 2012-10-04 22:06:21
名前
匿名
回答内容

回答を評価する
(0ポイント)
tools.jarにパスが通っていないのでは?
回答日時 2012-10-05 19:35:41
名前
回答内容

回答を評価する
(0ポイント)
ご教授ありがとうございます。

Eclipseのパッケージ・エクスプローラでは「JREシステ
ムライブラリ」にtools.jarがあります。

再度、ビルドパスの構成を変更してみましたが、
正常に動作しませんでした。

回答日時 2012-10-09 19:39:19
名前
回答内容

回答を評価する
(0ポイント)
送信元のHTMLが期待した結果と異なるのか、あるいは、
受信したサーブレットが期待した結果と異なる動作をするのか切り分けてみて下さい。

送信用の画面で生成されたHTMLに違いはありますか?

Action側で、
request.getParameterMap()
なりして取得したパラメーターの一覧を、
コンソールやログに出力してみたらどうなりますか?
回答日時 2012-10-09 20:02:04
名前
回答内容

回答を評価する
(0ポイント)
>satomiさん
ご教授ありがとうございます。
試してみます。

で、

人が作ったソースのバージョンアップを頼まれていたの
ですが。
以下の処理が入っていました。
これが原因のようです。。。
しかしなんで一桁だと0になるのかは不明。。。

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionServlet;
public class ExtendedActionServlet extends 
ActionServlet{
  public void doPost(HttpServletRequest request, 
HttpServletResponse response) throws IOException, 
ServletException{
    request.setCharacterEncoding("Windows-31J");
    super.doPost(request, response);
  }
}
回答日時 2012-10-10 14:38:24
名前
回答内容

回答を評価する
(30ポイント)
まさにこのサイトに記述があります。
http://www.javaroad.jp/servletjsp/sj_servlet13.htm

そういや、バージョン変わると文字化け対策も変わってくるんだっけ。
いつもフレームワーク側で文字化け対策してたから忘れてた。
回答日時 2012-10-10 14:54:42
名前
回答内容

回答を評価する
(0ポイント)
>satomiさん

class ExtendedActionServlet 内で
「request.getParameterMap()」をすると
正常に値が渡るのに、処理がないと値が渡りません。


回答日時 2012-10-10 15:24:02
名前
匿名
回答内容

回答を評価する
(0ポイント)
Windows-31JをUTF-8に変更するのが大変。。。
回答日時 2012-10-10 16:41:55
名前
回答内容

回答を評価する
(0ポイント)
web.xmlに以下を追加したらいけました。
ありがとうございました。


  <servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-
class>org.apache.jasper.servlet.JspServlet</servle
t-class>
    <init-param>
      <param-name>javaEncoding</param-name>
      <param-value>Windows-31J</param-value>
    </init-param>
  </servlet>


けど、Fileから「BufferedReader」してる所でエンコー
ド指定してないから直さないと。。。
回答日時 2012-10-11 13:43:11
名前
匿名
回答内容

回答を評価する
(0ポイント)
Html:optionsとか上位の配列やコレクション使えるやつを使おう
よ(笑)アップデートするなら
回答日時 2013-03-17 09:52:35
名前
匿名
回答内容

回答を評価する
(0ポイント)
ヒント:回答日時
回答日時 2013-03-17 16:15:28
名前
匿名
回答内容

回答を評価する
(0ポイント)
>> 2013-03-17 16:15:28
しってるw

あまりにも↓が粗雑な作業なんでww

<html:option value="<%=Integer.toString(iwk)%>">
<%=iwk%></html:option>
</html:select>
回答日時 2013-03-18 10:58:24
名前
匿名
回答内容

回答を評価する
(0ポイント)
ソースの「改善」を提案するかどうかも、回答者のスタンス
だからなあ。
常に選択肢は1つで今後変わることはないなら、わざわざMap
使って書き直すほどか、というのもある。

関係ないけどなんで片方だけInteger.toString()してるんだろ
う。
どっちも不要だし、使うなら両方使わないと何だか気持ち悪
い。
回答日時 2013-03-18 18:28:46

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道