2011-07-31 10 views
0

私は、void javaメソッドであるEL関数を使用することをお勧めします。これは、人の姓と名のデータベースを更新する簡単なJSPです。したがって、名前とパスワードの2つのテキストフィールドがあります。ユーザーはそれらを入力してsubmitをクリックし、POSTでこれらを別のJSPに転送します。このjspは単にEL関数を呼び出し、2つのパラメータをとり、JavaメソッドputPerson(String, String)から派生し、データベースへの接続を取得し、最初と最後の名前を適切な場所に配置する「put」と呼んでいます。現在、putPersonは、文字列をデータベースに格納するだけなので、無効です。だから、この悪いプログラミングの練習ですか、もしそうなら、なぜですか?それは私には、迅速かつエレガントな解決策であると思われ、それは動作します。唯一の問題は、何らかの理由で "<"が出力されるので、${put(first, last)}と言ってもそれを呼び出すことはできませんが、回避するのは簡単です。ではなぜ、EL関数をvoid戻り型で使用しないことをお勧めしますか?EL関数は、void以外の戻り値の型を持つJavaメソッドから取得する必要があるのはなぜですか?

+2

なぜサーブレットに入れるのではなく、EL関数が必要なのですか? – Jacob

答えて

1

印刷<はどこか他の場所から来ているか、ELパーサーのバグです。しかしどちらの方法でも、あなたはELの機能でそれを行うべきではありません。たとえば.substring().join()(配列)、などのために、彼らはあなたがページを表示している間に使用され、いくつかのより複雑なプレゼンテーションロジックを必要としている -

EL機能はユーティリティであることを意味しています。

あなたがしたいことは典型的なストーリーであり、サーブレット(またはフレームワークを使用している場合は他のアクションコンポーネント)で行われます。

+0

だから私はjspの代わりにサーブレットを作成し、その代わりにdoPostを呼び出す必要がありますか?さて、それは難しくないでしょう。 – joseph

+0

はい、正確です。それが起こるはずのやり方です – Bozho

0

必要なメカニズムがELよりも古いです - そしてそれはスクリプトレットと呼ばれている:初期のJSPで

<% 
    whatever.putPerson("John", "Smith"); 
%> 

別の構文は、単にプリント値に使用された(等号気づく):

<%= 
    whatever.getVal(); 
%> 

コマンド/クエリの分離があるときにコードを維持する方が簡単だと考えられたため、ELはモデルをクエリする方法(豆のプロパティを読み取る)として導入されました。 ELにそのような機能を追加することは意味がありません:まったく同じことを達成する2つの方法があり、ELの概念を破ることになるでしょう式は常に値と型を持ちます。だから、

ます:voidメソッドを呼び出すためのELを使用して

  • がuhmpf ...のようです...コードを実行するためのインポートを使用して:それは意味がありません。
  • メソッドを呼び出すために作成された非常に簡単なメカニズム(スクリプトレット)を使用できるため、これは問題ではありません。
+0

私は、スクリプトレットは推奨されていませんが、一般的にはスクリプトを避ける方が望ましいことを理解しています。しかし、あなたと他の人が説明したように、私がやっていたことも間違っていました/私はサーブレットを作ることにしました。とにかく助けてくれてありがとう – joseph

+0

@joseph:文脈を知らずに物事を「間違っている」と考えるのは愚かです。アプリケーションに50個のjspとサーブレットがない場合、サーブレットを追加するだけで1つのことを行うことができます。これは愚かでも間違っていてもかまいません。「スクリプトを避ける」ことは、それ自身の目標ではなく、単にコードをうまく機能させることです。スクリプトレットを使用してコードを作成する場合は、先に進んでください。 btw、私はまだあなたの質問に答えたと信じています: "EL関数は非void戻り型のJavaメソッドから来なければならないのはなぜですか?質問自体が間違っていると言っているのではなく、「あなたはEL機能でそれをしてはいけません。 – fdreger

関連する問題