• 締切済み

AjaxにてPOSTで配列パラメータの渡し方

Springが不慣れで困っております。 Ajax側ではPOSTtypeにてdataに数字配列を設定しています。  data: { 'values' : [1,2,3] }, SpringのContollerにて @RequestMapping(value = "/ajax", method = RequestMethod.POST) public Map<String, Object> ajax(@ModelAttribute("values") int[] values, BindingResult result) throws Exception { こんな感じで実装していますがメソッドに入って来なくて困っております。 配列ではなく単なる数値だけであればうまく行きますが、 何処がおかしいか教えてくださる方がいればよろしくお願いいたします。

  • Java
  • 回答数1
  • ありがとう数1

みんなの回答

回答No.1

https://itsakura.com/java-springboot-json こんな感じでシリアライザーを通してみるのは、いかがでしょう? data:JSON.stringify(json1), この部分が、おそらく、質問者さんが一番興味を持つとは思いますが。

関連するQ&A

  • jQuery $.ajax JSON形式のPOST

    jQuery $.ajax JSON形式のPOSTでフォーム内容を送信し、送信先のPHPでメール送信させるプログラムをかいているのですが、どうしても$.ajaxのerrorが呼び出される状況です。errorが呼び出されますが、PHPの方のメール送信はできております。 PHP側の出力がうまくいっていないのではないかと思いますが、原因がわかりません。どなたかご教授いただけないでしょうか?宜しくお願いします。 ---js--- $("#send").click(function(){ var NAME = $('#name').val(); var EMAIL = $('#email').val(); var TITLE = $('#titlel').val(); var COMMENT = $('#comment').val(); $.ajax({ url : "sendmail.php", dataType : "json", data : {name:NAME, email:EMAIL, title:TITLE, comment:COMMENT}, type : "post", success : function(data){ if(data != ''){ alert(data.result); } }, error : function(){ alert("通信に失敗しました。"); } }); }); ---sendmail.php--- if($_SERVER["REQUEST_METHOD"] != "POST"){ header("HTTP/1.0 404 Not Found"); return; }else{ //メール送信処理 (省略) $message = "送信完了メッセージ"; $result = array('result' => $message); echo json_encode($result); }

  • [Smarty] register_objectでの配列の扱い

    register_objectメソッドでテンプレートファイルに渡した配列にアクセスする方法がわかりません。 //PHPファイル register_object('data', $obj, 'array') //tplファイル 配列arrayの第一データは、{obj->array[0]}です。 //エラー 配列arrayの第一データは、{obj->array.0}です。 //エラー Smartyマニュアルに、register_objectメソッドについて、 『それはとてもセキュアで、 登録されたオブジェクトはいくつかのメソッドやプロパティを制限する事が出来ます。 しかし繰り返しの処理やオブジェクトの配列への割り当て等の事が出来ません。』 とありますが、これはregister_objectメソッドを使ってオブジェクトを渡す場合、配列にはアクセスできないということなのでしょうか? もし、そうであればassignを使うしかないのでしょうか?register_objectで書くほうがスマートなので、可能であればそちらを使いたいと思っています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • javaの連想配列について教えてください

    お世話になります。 javaの連想配列について教えてください。 やりたいことは下記のようなデータを作成したいです。 ================================================ {   "shcool" : {          "class" : "A",          "yamada" : {                "class" : "AA",                "height" : 165,                "weight" : 60         },          "saitou" : {                "class" : "AB",                "height" : 170,                "weight" : 65         }   } } ================================================ 下記HPを参考してHashMap+HashMapで作成したのですがうまくいきません。 http://www.atmarkit.co.jp/fjava/javatips/081java010.html Map<String, Object> map = new HashMap<String, Object>(); map.put("school", new HashMap<String, Object>()); ((Map) map.get("school")).put("class", "A"); ((Map) map.get("school")).put("yamada", new HashMap<String, Object>()); ((Map) map.get("school")).get("yamada").put("class", "AB"); ・・・ としても下記エラーとなってしまいます。 ----------------------------------------------------- エラー: シンボルを見つけられません ((Map) map.get("school")).get("yamada").put("class", "AB");                            ^ シンボル: メソッド put(String,String) ----------------------------------------------------- 途中のschoolのvalueにHashMapを入れるところまではうまくいっているようですが、 yamadaのvalueにHashMapを入れて.put()の仕方がわかりません。。。 上記データをHashMap+HashMapで作成するにはどうしたらよいでしょうか? ぜひご教示いただけると嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • WebWork(struts2)でのパラメータの取得について

    こんにちは。 環境:Webwork & Velocity(xwork2) & Tomcat5.5 & JDK 1.6 Action部がだいぶすっきりしましたが、requestのパラメータの取得が分かりません。 一般的なActionSupportを継承しているのですが、thisからHTTPRequestらしきGetterもありませんし・・。 やろうとしている事は'XXX.action?id=YYY'のように、URLからパラメータをgetしたいのですが。 ■JavaScript var url = "XXX.action?id=test"; ※Ajaxでリクエストしてますが省略します。 ■XML <action name="XXX" class="aaa.XXXAction">  <result name="menu" type="plainText">   /WEB-INF/classes/aaa/menu.html  </result>  <result name="test" type="plainText">   /WEB-INF/classes/aaa/test.html  </result> </action> ■Action public class XXXAction extends ActionSupport {  public String execute() throws Exception {   return SUCCESS; //←ここでURLにくっついたパラメータを返したい お分かりになりましたら、よろしくお願いします。

    • ベストアンサー
    • Java
  • ParseとTryParseを実装するなら

     こんにちは。c#初心者です。  c++にも、c#にもintにParseメソッドと、TryParseメソッドがあると思いますが、intのように比較的簡単に解析できるもの(比較的簡単なメソッド)ならParseメソッドをコピペして、例外の部分を「return false;」に変えるだけで十分だと思うのですが、問題は、Color構造体のような(やや)複雑なものです。  R, G, Bに加え、α値があり、また、名前で色を表す可能性もあります。考えただけで(intと比べると)かなり面倒なメソッドになることが分かると思うのですが、とりあえずParseメソッドを実装したとしましょう。  次にどうせならTryParseメソッドも実装したいところなのですが、初心者が考えた方法は3つあります。 1、Parseメソッドをコピペして(FormatExceptionなどの)例外部分を「return false;」に変える。 2、Parseメソッドをtryブロックに入れて、catchブロックで「return false;」とする。 3、privateなtryParseメソッドを用意し、それをベースにする。戻り値はException型で、Parseメソッドではnullで無ければスロー、TryParseメソッドでは「return exception == null;」とする。 (ソースコードは一番下)  1は保守性上、少々問題ありかと。2は利用側がちょっと楽になることには変わりないが、パフォーマンス重視には向かない(というかテキストを解析している時点でパフォーマンス低いかな?)、3は1、2の問題を克服しているもののこのような設計でよいのか自信なし。  という訳で悩んでいます。どれが一番良いでしょうか? もっと良い案があればそれでも良いです。どなたかわかる方がいらしゃいましたら教えてください。 ----------- 簡易ソースコード -------------- c#で書いています。また読みやすく(なっているかどうかは分かりませんが)するため、1行で書けるところも2行以上で書いている部分もあります。 案1 public static Color Parse(string text) {   ……   if ( invalid ) throw new FormatException();   …… } public static bool TryParse(string text, out Color result) {   ……   if ( invalid ) {     result = Color.Empty;     return false;   }   …… } ------------------------------------------------ 案2 public static Color Parse(string text); // 略 public static bool TryParse(string text, out Color result) {   try {     result = Parse(text);     return true;   }   catch ( FormatException ) {     result = Color.Empty;     return false;   } } --------------------------------------------------- 案3 private static Exception tryParse(string text, out Color result) {   ……   if ( invalid ) {     result = Color.Empty;     return new FormatException(); // スローせずに返す   }   …… } public static Color Parse(string text) {   Color result;   Exception exception = tryParse(text, out result);   if ( exception != null ) throw exception;   else return result; } public static Color TryParse(string text, out Color result) {   Exception exception = tryParse(text, out result);   if ( exception == null ) return true; // 例外が無ければ成功   else return false; }

  • Ajax:FireFoxだと動作しない

    既出でしたらすみません。 IEだとうまく動作するものが、FireFoxだと動作しません。 原因をご存知の方がいらっしゃいましたら、 ご教示願えますでしょうか。 参考書籍などをお伝えいただくだけでも構いません。 私はプログラミングの知識はありますが、 DOMについては初心者です。 よろしくお願いします。 ----------HTML/JSソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Ajaxサンプル</title> <script type="text/JavaScript" src="../lib/prototype.js"></script> <script type="text/javascript"> <!-- function getFile(){ new Ajax.Request('test_xml03.xml', {method: 'get', onSuccess: getResponse, onFailure: getError }); function getResponse(req){ var varResult = req.responseXml.getElementsByTagName('result'); var varItem = varResult[0].getElementsByTagName('country'); $('result').innerHTML = varItem[0].firstChild.nodeValue; } function getError(req){ $('result').innerHTML = "ERROR"; } } //--> </script> </head> <body> <div> <input type="button" value="データの読み込み" onClick="getFile()"/> </div> <div id="result" >ここにデータを読み込みます。</div> </body> </html> ----------XMLデータ(test_xml03.xml) <?xml version="1.0" encoding="UTF-8" ?> <result> <country>アメリカ</country> <kanji>米</kanji> </result> ----------状況 「データの読み込み」ボタンをクリックすると、 IEでは"result"部分に 「アメリカ」と出ますが、 FireFoxだと何も起こりません。 ----------環境 WindowsXP IE6.0 FireFox2.0 prototype.jsを使用 ----------補足 使用しているJavaScriptは、自分で調べた限りでは IE/FF共に使用できるコードばかりのはずです。 いろいろと試してみましたが、わかりません。 どうかよろしくお願い申し上げます。

  • jQueryのメソッドの実行方法

    jQueryで、以下のようなajaxメソッドを実装しました。 var task1 = $.ajax({ url: sampleUrl, cache: false, async: true, success: function(result){ //成功した時の処理 }, complete: function(XMLHttpRequest, textStatus){ //後始末 } }); 問題は、この処理が終わって画面で操作をした際に、また同じメソッドを呼び出したいのです。 しかし、 task1(); などと呼び出しても、「called_non_callable」となってしまい、エラーとなってしまうのです。 どなたか良い方法は無いでしょうか。

  • 2点質問があります。

    2点質問があります。 ●1点目 Struts + Springで開発を行っています。 その開発チーム内では、DBから一覧画面用のデータを取得する際に SimpleJdbcTemplateのqueryForList()を用い、 上記メソッドより返されたList<Map<String, Object>>型のデータを そのままAction、JSP等で利用しています。 queryForList()の使い方を調べてみると、 Map<String, Object>型のデータをDTOのようなオブジェクトに入れ替えて 再度リスト化してJSP等で利用している例を見かけます。 (http://www.techscore.com/tech/Others/Spring/5-4.htmlなど) 私の開発チームでは、Map<String, Object>型をDTOに入れ替えると その分余計なクラス(DTO)を作らなければならないため、 Map<String, Object>型のまま使っているのですが、 DTOに入れ替えない場合に保守性、性能面等で問題はあるのでしょうか? ●2点目 1点目の質問でMap<String, Object>型のまま利用することに重大な問題点がない という回答が頂けた場合の話です。 登録内容変更画面にて、 以前登録した内容をDBから取得してテキストボックス内に表示し 画面上で値を変更しDBを更新する処理を行う際に、 入力項目が繰り返し入力フィールドとなっています。 この場合、以前の登録内容がDBよりList<Map<String, Object>>型で返され、 JSPで表示する場合に以下のようにして表示が可能でした。 <nested:iterate property="dataList"> <nested:text property='dataString1'/> <nested:text property='dataString2'/> </nested:iterate> またActionFormは以下のように定義しています。 public class DataForm extends ActionForm { private List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>(); //以下dataListのgetter、setter } しかし、画面にてdataString1、dataString2に入力した内容を DataForm.dataListで受け取ることはできませんでした。 ActionFormにて配列やオブジェクトで各入力項目を一旦受け取り List<Map<String, Object>>型に入れなおすのではなく、 直接List<Map<String, Object>>型フィールドで値を受け取ることは不可能なので しょうか? ※これも余計なクラスやフィールドを作成しないという考えに基づいています。 尚、Struts、Springのバージョンは以下の通りです。  Struts:1.2.9  Spring:2.0.8

  • Java の配列の中身は volatile ですか?

    たとえば(無理やりな例ですが)、クラスが private final boolean isReady[] = {false, false}; public void setIsReady(int index, boolean isReady) {  this.isReady[index] = isReady; } public void doTask(int index) throws Exception {  while (! isReady[index] ) {   Thread.sleep(1000);  }  doSomething(); } のようなメンバとメソッドを持っていて、setIsReady() と doTask() がそれぞれ別のスレッドから呼ばれるような場合、doTask() の中の while ループはちゃんと抜け出す事が保証されますか? (もちろん isReady[index] を true にセットするとして。) isReady が配列ではなければ private volatile boolean isReady = false; としておけば安心できるのですが、配列の中身を明示的に volatile に宣言 出来ないようなので。(出来るのならばやり方を教えてください。)

  • Ajaxの使い方がおかしいでしょうか?

    Javascript の初級者です。 今、Formを使って更新処理しようとしています。 同時に、submitが押されたときに、データをチェックするために関数に 飛ばしています。 ★印のところだけが「true」で他のところは「false」なので処理を中断させたいと 考えています。 Ajaxを非同期で実行すると訳が分からなくなってしまったので同期処理にしています。 ところがどのような条件でsubmitしてもFromが実行されてしまいます。 Ajaxの success 下にこのような分岐処理を書くのは間違いなんでしょうか。 どなたかお分かりになる方、ご指導下さい。 よろしくお願いします。 function upadateCheck(){ var strYear = $("#year").val(); var strMonth = $("#month").val(); var strClosingDate = $("#closingDate").val(); $.ajax({ async: false, // 同期処理 type: "POST", url: "/customercheckclosingdate", data: {"closingDate":strClosingDate,"year":strYear,"month":strMonth,}, dataType: 'text', success: function(request){ var arr = eval(request); var data = arr[0]; if(data.result == "nothing"){ window.alert("指定の「締日」の得意先はありませんでした。"); return false; }else if(data.result == "no"){ window.alert("指定の「処理年月」と「締日」で更新処理を行うには、締日の不整合があります。"); return false; }else{ if(window.confirm("締日:" + strClosingDate + "日\n処理年月:" + strYear + "年" + strMonth + "月\n\nの更新処理を行います。")){ return true; ★★★★★★★★★★★★★★★★ }else{ return false; } } }, error: function(msg){ alert( "Data Saved: " + msg ); return false; } }); } <form method="POST" action="/update" onsubmit="return upadateCheck()"> <table> <tr> <th>締   日:</th> <td> <input type="hidden" id="year" name="year"> <input type="hidden" id="month" name="month"> <SELECT id="closingDate" name="closingDate" > <OPTION value="05">5</OPTION> <OPTION value="10">10</OPTION> <OPTION value="15">15</OPTION> <OPTION value="20">20</OPTION> <OPTION value="25">25</OPTION> <OPTION value="末">末</OPTION> </SELECT> </td> <td colspan="2"> <input type="submit" value="更新処理" /> </td> </tr> </table> </form>

専門家に質問してみよう