2017-06-01 6 views
0

で偽/ htmlのチェックボックスが真送ってください:私は、フォームに次のチェックボックスを持ってシリアライズ

<input type="checkbox" name="preparationNeeded" > 

これはJavaScriptでSpringControllerに送信されます。

.ajax({ 
         type : 'POST', 
         url : '${home}ui' + action + name + '.html', 
         data : $('#updateform').serialize(), 
         success : function(data) { 
          console.log("SUCCESS: ", data); 
          document.getElementById('viewmodal').style.display = 'none'; 
          display(data); 
         }, 
         error : function(e) { 
          console.log("ERROR: ", e); 
          displayError(e.responseText); 
         } 
        }); 

シリアライズは次のとおりです。

チェックすると:

未チェック(チェックボックスの値が含まれていない)

:これは、ブールフィールドを持つオブジェクトに解析され

FORM: id=1& ... 

をArticle.preparationNeded。これはほぼすべての場合に問題なく動作しますが、問題はprepareNededのデフォルト値はです。

このチェックボックスをオンにすると、値trueが正しく送信されます。しかしチェックボックスがチェックされていない場合、値はシリアル化されておらず、の代わりにのフィールドのデフォルト値をとっています。

ヒント

:あなたはまた、私は値= "false" にして隠された値が含まれる場合は、この作品

問題を隠し入力の導入を検討することができます

How to change the value of a check box onClick using JQuery?

チェックボックスがオフの場合は問題ありません。

FORM: id=1& ... preparationNeeded=false&preparationNeeded=true ... 

この

"偽真" の値があるorg.springframework.validation.FieldError

Field error in object 'item' on field 'preparationNeeded': rejected value [false,true]; codes [typeMismatch.item.preparationNeeded,typeMismatch.preparationNeeded,typeMismatch.boolean,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.preparationNeeded,preparationNeeded]; arguments []; default message [preparationNeeded]]; default message [Failed to convert property value of type [java.lang.String[]] to required type [boolean] for property 'preparationNeeded'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [false,true]] 

Bacauseを上げる:これはシリアライズをチェックされている場合でも、次のようですなにか提案を?ありがとう!

答えて

0

チェックボックスのデフォルトをfalseに設定すると、フォームがオブジェクトに解析されたときにチェックボックスがオンになっている場合にのみtrueになります。

ユーザーがクリックする必要がないようにデフォルトでチェックする場合は、ページが読み込まれたときにJavaScriptを使用して手動でチェックボックスをオンにすることができます。

+0

heheh 、 はい。ありがとうございました! – Jeremy

0

チェックボックスをダミーの名前に変更し、prepareNeededフィールドを非表示にして、JSを使用してチェックボックス状態の変更ごとにprepareNeededの値を適切に設定できます。

+0

ダミーチェックボックスに属性を指定して、$( '#updateForm:input [name!= "prepareNeededDummy"]')を使用できるようにすることもできます。serialize()フォームデータを送信します。 – Jeremy

0

オプションは、チェックボックスのクリックを観察することです。チェックボックスをオンにすると、非表示の入力の名前をクリアします。このようにして、隠し入力値は、チェックボックスがチェックされていない場合にのみ直列化出力に追加されます。

以下、このデモを参照してください:2つのラジオbuttons-真のために1、偽のための1つを持っている

$(document).ready(function() { 
 
    $('#serialize').click(serializeForm); 
 
    $('#preparationNeededCheckbox').click(handleCheckboxClick); 
 
}); 
 

 
function serializeForm() { 
 
    console.log('serialized form: ',$('#updateform').serialize()); 
 
} 
 

 
function handleCheckboxClick() { 
 
    $('#hiddenCheckboxInput').attr('name', this.checked ? '' : this.name); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form id="updateform"> 
 
    Needs Preparation: <input type="checkbox" name="preparationNeeded" value="true" id="preparationNeededCheckbox" /> 
 
    <input type="hidden" name="preparationNeeded" value="false" id="hiddenCheckboxInput" /> 
 
</form> 
 
<button id="serialize">Serialize</button>

しかし、おそらくそれは単純かもしれませんが...

関連する問題