この質問 はほぼ正確に私の問題ですが、私はそのポスターが犯した間違いを犯していません。のように、フィールドに入力するために#valueを使用していませんが、適切な#default-valueを使用しています。
私はubercartを使用していますが、作成したフォームはチェックアウトペインの一部です。残念ながら、メインのuc-cart-checkout-form内でdrupal_get_form()をチェックアウトペインの値として使用する必要がありました。そうしないと、独立した送信ボタンを提供したり、それらを適切にまとめたりすることができません。
問題は、検証後、フォームフィールドがクリアされていることです。デフォルト値のみがリセットされます。検証ハンドラーを作成してみました(実際には、uc_cart_checkout_formのhook_form_alter()から呼び出しているカスタム検証関数で検証が行われている場合でも)
これをSESSIONSで手動で行うのが唯一の方法ですか? drupal_get_form内でdrupal_get_formを呼び出すことにより、FAPIを取り返しのつかないほど混乱させていますか?
三項条件演算子を使用して、$ form_state ['values']に何かがあるかどうかを確認すると思います。つまり、次のようになります。
$default_value = 'Test Default Value';
$form['test'] = array(
'#type' => 'textfield',
'#default_value' => !empty($form_state['values']['test'])?$form_state['values']['test']:$default_value,
);