0

冗長性を減らし、OOPの原則を高めるために、WebベースのアプリケーションにJavaコードを実装しようとしています。

サーバー側のJavaコードに電話検証の正規表現があります。サーバーと通信せずに、人々が情報を追加しているのと同じ検証をブラウザーで実行する必要があります。同じコードをJavaScriptに配置できることは理解していますが、同じコードを維持するための場所が2つあります。http応答で正規表現関数を送信する簡単な方法を探しています。

//java code
Class myVerf
{
    bool verPhone(input) {return //comepare verPhone to regEx}
}

//html
input type = "text" id = "1" onkeypress = "verPhoneFunc()"

//javascript
function verPhoneFunc()
{
    //get value from id 1
    //execute verPhone java code
}

これを行うことの欠点はありますか?例:ブラウザが実行されているマシンにJVMがない場合はどうなりますか?Javaコードはブラウザでどのように実行されますか?

もう一度強調したいのですが…サーバーと通信できないのでAJAXが使えません。

4

3 に答える 3

2

いくつかの追加のテクノロジーなしでは、あなたが探していることを実際に行う方法はありません。

必要なことを行う最も直接的な方法は、JavaとJavascriptの両方がアクセスできる共通の場所に文字列を準備することです。説明のために、これはどこかのテキストファイルにあると言いますが、(たとえば)JSPを使用している場合は、Javaで文字列を準備し、JSPテンプレートを介してJavascriptに公開できます。文字列には、(コンパイルされていない)正規表現が含まれます。

このソリューションでは、主要な設計目標を維持しています(正規表現を1か所にのみ維持します)。

于 2012-11-30T18:57:49.850 に答える
1

サーバー側アプリとクライアントアプリの間でJavaコードを簡単かつ確実に共有することはできません(前述のように、Javaがインストールされていない場合はどうなりますか。これが適切なアプローチではない理由は他にもあります)。

そうは言っても、代わりにできることは、検証ビジネスルールを共有することです。検証ルールを指定するための言語を定義してから、これらのルールを読み取って実行できる2つの検証エンジンを実装します。1つはバックエンド用のJavaで、もう1つはクライアント用のJavascriptです。Webアプリは、これらのルールの集中管理されたリポジトリを持ち、それらを両方のエンジンに一貫してフィードできます。javascriptエンジンは、ページのHTMLに埋め込まれたこれらのルールを受け取ることができるため、AJAXは必要ありません。

于 2012-11-30T18:58:44.950 に答える
1

たとえば、Struts 2を使用している場合は、そのフレームワークに組み込まれている宣言型検証メカニズムを活用できます。これにより、1つの場所での検証の宣言がサポートされ、フレームワークはその検証をサーバー側の検証とクライアント側の検証の両方に伝播します。

http://struts.apache.org/2.3.4.1/docs/validation.html

于 2012-11-30T19:57:46.360 に答える