2012-02-15 9 views
0

のチェックボックスとサブミットボタン付きのJSFフォームがあります。私はすべてをクリックするか、いくつかのチェックボックスを選択してフォームを送信することができます。Javaストアドプロシージャ(Java JSF)で未定義のパラメータを持つOracleストアドプロシージャ

JavaScript関数を使用して、私がクリックしたチェックボックスの値を取得し、それらを文字列に連結します。例えばcheckbox1=IC&checkbox2=S

この値は私のJavaクラスに送られます。 Oracleのストアドプロシージャでチェックボックスの値を渡したいと思います。

この文字列には、1つのチェックボックスから15個のチェックボックスまでの値を含めることができます。ストアドプロシージャは、取得する値の数に対応できる必要があります。

例:

checkbox1=IC&checkbox2=Sまたはcheckbox1=IC&checkbox2=S&checkbox3=I&checkbox4=Sa&checkbox5=f&checkbox6=g&checkbox7=h&checkbox8=i&checkbox9=q&checkbox10=e&checkbox11=t&checkbox12=p&checkbox13=89&checkbox14=100&checkbox15=2012

すぎストアドプロシージャを作成する方法上の任意のアイデア?

あなたの忍耐と答えをありがとう。

+0

には選択されていないボックスにnull値を渡すことができない理由があります、必要に応じて手続きを解釈させるのか? Java側では、各組み合わせの呼び出しを変更する必要があるため、デフォルトの名前付きパラメータよりも簡単です。私は何かが欠けているかどうかは分かりません。 –

+0

@AlexPooleこれらのチェックボックスは動的なので、生成されるチェックボックスの数は事前にわかっていません – yash

+0

しかし、あなたはすべての可能性を知っています。そうでなければ、procはどのように値をどうやって知っていますか?あなたのprocに15個のパラメータがある場合は、表示したボックスの値を返信して値を取得できますか? –

答えて

0

アレイを受け入れるようにOracleストアドプロシージャを宣言できます。その情報をストアドプロシージャにどのように伝えたいのかがすぐわかりません(つまり、チェックボックスの名前と関連する値を渡す必要があるのか​​、チェックボックスNをオンにしただけでよいのか)。アウトライン化の最も簡単なオプション(ストアドプロシージャでの解析作業が増えることがありますが)は、配列の各要素がストアドプロシージャに対してcheckbox1=ICのような文字列を渡すことです。あなたはその後、(this askTom threadから適応)このようなもので、Javaから呼び出すことができます

CREATE OR REPLACE TYPE str_table 
    IS TABLE OF varchar2(100); 

CREATE OR REPLACE PROCEDURE process_checkboxes(p_checkboxes IN str_table) 
AS 
BEGIN 
    FOR i IN 1 .. p_checkboxes.count 
    LOOP 
    <<do something with p_checkboxes(i)>> 
    END LOOP; 
END; 

import java.io.*; 
import java.sql.*; 
import oracle.sql.*; 
import oracle.jdbc.driver.*; 

public class ArrayDemo 
{ 
    public static void passArray() throws SQLException 
    { 
     Connection conn = <<get your JDBC connection>> 

     String checkboxStr = "checkbox1=IC&checkbox2=S"; 
     String strArray[] = checkboxStr.split("&"); 

     ArrayDescriptor descriptor = 
     ArrayDescriptor.createDescriptor("STR_TABLE", conn); 

     ARRAY array_to_pass = 
      new ARRAY(descriptor, conn, strArray); 

     OraclePreparedStatement ps = 
      (OraclePreparedStatement)conn.prepareStatement 
      ("begin process_checkboxes(:x); end;"); 

     ps.setARRAY(1, array_to_pass); 

     ps.execute(); 
    } 
} 
+0

何ですか?x? タイプの作成または置換str_table IS TABLE OF OF VARCHAR2(100); プロシージャ自体で作成しますか? – yash

+0

@yeah - SQLエンジンで型を作成する必要があります。これは、プロシージャを作成する前にデータベースに作成するオブジェクトです。 –

+0

プロシージャ自体で配列を分割することは可能ですか? – yash

関連する問題