Wicket-ja

Formをサブミットしてバリデーションエラーになると、チェックボックスやラジオボタンなど、入力項目がリセットされてしまう

Form上にListViewがありませんか? ListViewのpopulateItemメソッド内でFormComponent類を作成してませんか?

ListViewのpopulateItemは、ページが表示されるたびに呼び出されます。そのため、バリデーションエラーで元の表示が表示されたとたん、ListView内のすべてのFormComponentは一から再作成されます。なのでリセットされたように見えます。

ListViewのsetReuseItems(true)を呼び出すことで、ListView再作成処理を抑止できます。Form上でListViewを使って入力項目を作成する場合は、この操作は必須です。

注意点として、setReuseItems(true)を呼び出すと、ListViewの内容を最新に保つのはプログラマの仕事になります。ListViewのremoveAll()を呼び出して全項目をいったん削除しない限り、同じListItemオブジェクトが繰り返し使われます。

以下、Javadocより引用

WARNING: though you can nest ListViews within Forms, you HAVE to set the setReuseItems property to true in order to have validation work properly. By default, setReuseItems is false, which has the effect that ListView replaces all child components by new instances. The idea behind this is that you always render the fresh data, and as people usually use ListViews for displaying read-only lists (at least, that's what we think), this is good default behavior. 
However, as the components are replaced before the rendering starts, the search for specific messages for these components fails as they are replaced with other instances. Another problem is that 'wrong' user input is kept as (temporary) instance data of the components. As these components are replaced by new ones, your user will never see the wrong data when setReuseItems is false.