- PR -

Vectorのデータ確認

1
投稿者投稿内容
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2004-09-27 09:53
画面にある入力項目の値が変更された場合に、何行目のデータが変更されたかを格納するVectorに
行数を格納しようとしています。格納する場合には既に同じ値が格納されていないか確認して
格納されていない場合のみ格納します。
下記のようにしてみたのですが、Vectorになにも格納されません。

<input name="txtId" onChange="<% if(vecUpdRwo.contains(String.valueOf(i))==false){vecUpdRwo.addElement(String.valueOf(i));} %>" type="text" id="txtId" tabindex="6" size="28" value=<%= bean.getId(i) %>>

このような事を実現するには、どのような方法があるのでしょうか?
よろしくお願いします。
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2004-09-27 10:05
画面のソースはどのようになっていますか?
onChange=""であれば何も実行されません。
onChangeはJavaScriptを呼ぶためのイベントなので、Javaを実行するためには、
JavaScriptの関数を用意して、そこからServletをコールするなどの必要があると思います。
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2004-09-27 10:15
taroさん、ありがとうございます。

引用:

onChangeはJavaScriptを呼ぶためのイベントなので、Javaを実行するためには、
JavaScriptの関数を用意して、そこからServletをコールするなどの必要があると思います。



そうなんですね、恥ずかしながら知りませんでした。
<%%>で囲っておけば何でも動くと思ってました。
今回は、Servletを使わないでやってみたいので、onChangeでFunctionを呼んで
そこで、処理してみようと思います。


[ メッセージ編集済み 編集者: カウンター 編集日時 2004-09-27 10:28 ]
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2004-09-27 10:30
引用:

カウンターさんの書き込み (2004-09-27 10:15) より:
今回は、Servletを使わないでやってみたいので、onChangeでFunctionを呼んで
そこで、処理してみようと思います。
ちなみに、Vectorの既存のデータを確認して、比較データがなければ格納するというのは

コード:
if(vecUpdRwo.contains(String.valueOf(i))==false){
vecUpdRwo.addElement(String.valueOf(i));
}



で良いのでしょうか?

[ メッセージ編集済み 編集者: カウンター 編集日時 2004-09-27 10:21 ]



FunctionというのはJavaScriptの関数ということでしょうか?
お書きになったコードは内容は正しいと思いますが、Javaのコードですよね?
Servletを使わないのであれば、JSPをリロードすると
Javaのコードが再度実行されて希望の結果になるかもしれません。
(説明が下手ですみません・・・。)
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2004-09-27 10:44
taroさん、ありがとうございます。

引用:

FunctionというのはJavaScriptの関数ということでしょうか?
お書きになったコードは内容は正しいと思いますが、Javaのコードですよね?



そうです、javaのコードです。
ただ、javascriptのfunctionでやるにしても、
if(vecUpdRwo.contains(String.valueOf(i))==false){ のiをjavaの変数として
取得できなさそうなので、無理っぽいです

やはり、servletを使うしかないのが一番スマートなやり方なのでしょうか。
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2004-09-27 11:03
生成されたVectorをどのように使用するか分からないので何がスマートかは
分からないのですが、Vectorに含まれる値かどうかはJavaScriptに判断させて、
新しい値が入力されたときだけ、パラメータに入力値を付けて同じJSPを
コールして再表示させることはできると思います。
更新ボタンでも用意した方がUIは良いかもしれませんが・・・。

コード:

<Script language="javascript">
<% Vector vecUpdRwo = (Vector) bean.getVecUpdRwo(); %>
// JavaScriptの配列にVectorの値をコピー
var arrayUpdRwo = new Array(<%= vecUpdRwo.size() %>);
<% for(int i=0; i<vecUpdRwo.size(); i++){ %>
arrayUpdRwo[i] = "<%= vecUpdRwo.elementAt(i) %>";
<% } %>
function pageChange(obj){
var param = "";
var i = 0;
for(i=0; i<arrayUpdRwo.length; i++){
if(arrayUpdRwo[i]==obj.value){
return; // 同じ値なら処理しないで返す
}
}
location.href = "/.../this.jsp?param="+obj.value;
}
</Script>
<input name="txtId" onChange="pageChange(this)" type="text" id="txtId"
tabindex="6" size="28" value=<%= bean.getId(i) %>>



[ メッセージ編集済み 編集者: taro 編集日時 2004-09-27 11:09 ]
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2004-09-27 14:33
taroさん、ありがとうございます。

いろいろ検討した結果、教えて頂いた方法とはちがうのですが、
各行に非表示オブジェクト(フラグとして)を用意しておいて、
onChangeで変更された行のフラグをたてて、
配列を作成するタイミングで、画面の全行を見て、フラグがたっている行番号のみを
配列に格納することで、解決しました。
1

スキルアップ/キャリアアップ(JOB@IT)