ListView에서 복사된 전체 Input Fields의 Validator 확인
15857 단어 Wicket
불특정 수량의 드롭다운 선택이 있는 포엠을 제작할 때 다음과 같은 결과의 발리 데이터를 만들고 싶다.
오류 없음
Custom Validator 만들기
코드
Page.html
<body>
<p>入力ページ</p>
<div wicket:id="feedback"></div>
<form wicket:id="form">
<ul style="list-style-type: none;" wicket:id="listView" >
<li><span wicket:id="order">Number:</span> : <select wicket:id="selector"></select></li>
</ul>
<p><input type="submit" value="決定" wicket:id="upload" class="btn" /></p>
</form>
</body>
Page.java//一部抜粋
final Form<?> form = new Form<Void>("form");
//選ばれた内容が正しいか判定するValidator
final SelectionValidator selectionValidator = new SelectionValidator();
form.add(selectionValidator);
//選択肢リスト
final List<String> options = Arrays.asList("","A","B","C");
//選択したobjectが入るリスト
final List<String> selection = Arrays.asList("","","");
//ListViewでFormにDropDownChoiceをAddする
ListView<String> listView = new ListView<String>("listView",selection){
private static final long serialVersionUID = 6483489885119506981L;
@Override
protected void populateItem(ListItem<String> item) {
DropDownChoice<String> dropDownChoice = new DropDownChoice<String>("selector", item.getModel(),options);
item.add(dropDownChoice);
//SelectionValidatorにComponentを預ける
selectionValidator.addComponents(dropDownChoice);
}
};
listView.setReuseItems(true);
form.add(listView);
AjaxButton upload = new AjaxButton("upload") {
private static final long serialVersionUID = 606832891534714518L;
@Override
protected void onSubmit(AjaxRequestTarget arg0, Form<?> arg1) {
//buttonを押された時に選ばれた内容を表示する
info(selection.toString());
arg0.add(feedbackPanel);
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
//エラー時の処理
target.add(feedbackPanel);
}
};
form.add(upload);
SelectionValidatio.java/** ドロップダウンチョイスが正しく選ばれているかチェックするValidator
チェック項目は2点:
1. 選択漏れはないか
2. 選択の重複はないか
*/
public class SelectionValidator extends AbstractFormValidator {
private static final long serialVersionUID = -5475763159946590330L;
//Validate対象を保持するリスト
private final List<DropDownChoice<String>> components = new ArrayList<DropDownChoice<String>>();
public void addComponents(final DropDownChoice<String> component) {
components.add(component);
}
@Override
public FormComponent<?>[] getDependentFormComponents() {
return components.toArray(new FormComponent[components.size()]);
}
@Override
public void validate(final Form<?> form) {
//検証に用いるデータをinpuFieldsから取り出す
List<String> inputs = new ArrayList<String>();
for(DropDownChoice<String> component : components){
inputs.add(component.getConvertedInput());
}
//1.選択漏れはないか
for(String string : inputs){
if(string.isEmpty()){
form.error("選択漏れがあります");
return;
}
}
// 2.選択の重複はないか
for(int i = 0; i < inputs.size(); i++){
for(int j = i+1;j < inputs.size(); j++){
if (inputs.get(i).equals(inputs.get(j))) {
form.error("選択が重複しています");
return;
}
}
}
}
}
사이트 축소판 그림Subject: Adding Custom validator for Listview having multiple checkboxes - msg#00320
ListView에서 생성된 구성 요소에 스파이크 데이터를 지정하는 WicketJava
Reference
이 문제에 관하여(ListView에서 복사된 전체 Input Fields의 Validator 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kyabe/items/9ddaf80150a042312740텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)