[Seasar-user:20707] Teedaのチェックボックスでダイナミックプロパティでdisable時の挙動

吉田朋也 [E-MAIL ADDRESS DELETED]
2011年 4月 4日 (月) 22:19:30 JST


お世話になります。
吉田と申します。

Teedaを使用してWebアプリを作成しております。
チェックボックスのダイナミックプロパティについて質問がございます。

チェックボックスを、ダイナミックプロパティでdisableにした際に、
画面描画後、JavaScriptでそのdisable項目をenableにしてsubmitしても、
チェックボックスの値がsubmitされません(nullになる)

初期表示時にdisableだとチェックボックスの値がsubmitされていないようです。
(実際、ダイナミックプロパティで初期表示時にenableにしておくとsubmitされる)

この挙動は仕様でしょうか?
またこれを回避する案などありますでしょうか。


実行環境、サンプルコードは以下です。
JDK : 6u22
S2 : 2.4.43
Teeda : 1.0.13-sp10

■disableSample.html
-------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:te="http://www.seasar.org/teeda/extension" xml:lang="ja"
lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>disaleサンプル</title>
<script src="jquery-1.5.1.min.js"></script>
<script type="text/javascript">
//<![CDATA[
function toggleDisable() {
	var checked = $('#isChecked').attr('checked');

	if (checked == true) {
		$("#option input:checkbox").attr('disabled', '');
	} else {
		$("#option input:checkbox").attr('disabled', 'disabled');
	}
}
//]]>
</script>
</head>
<body>
<div><span id="allMessages" /></div>

<form id="Form">
<input type="hidden" id="optionItemsSave" />

送信フラグ <input type="checkbox" id="isChecked" onclick="toggleDisable();" /><br />

<span id="option" te:col="3" disabled="disabled">
    <input type="checkbox" name="option" /> Option
</span>
<br />
<input type="submit" id="doSubmit" value="送信" />
</form>
</body>
</html>
-------------------------------

■DisableSamplePage
-------------------------------
public class DisableSamplePage {

    public String[] option;
    public Map<String, String> optionItems;
    public FacesMessageHelper messageHelper;

    public Class<?> initialize() {
        optionItems = new LinkedHashMap<String, String>();
        option = new String[3];

        for (int i = 0; i < 3; i++) {
            optionItems.put("ラベル" + i, "値" + i);

            option[i] = "値" + i;
        }

        return null;
    }

    public Class<?> doSubmit() {
        System.out.println("==================================");

        // 初期表示時にdisableだと、JavaScriptでenableにしても、nullになる。
        System.out.println(Arrays.toString(option));

        if (option == null || option.length == 0) {
            messageHelper.addErrorMessage("E0000001");
        }

        return null;
    }

    public boolean getOptionDisabled() {
        return true; //falseを返却する(初期表示はenable)と正常にポストされる
    }
}
-------------------------------

以上、宜しくお願いします。


Seasar-user メーリングリストの案内