ListView에서 복사된 전체 Input Fields의 Validator 확인

15857 단어 Wicket
목표
불특정 수량의 드롭다운 선택이 있는 포엠을 제작할 때 다음과 같은 결과의 발리 데이터를 만들고 싶다.


오류 없음

Custom Validator 만들기
  • Abstract FormValidator를 계승하는 Custom Validator 클래스 만들기
  • CustomValidator에서 검사 대상을 유지하는 inputField의 List
  • 제작
  • CustomValidator 내의Validator 방법에서 inputField의List에서 입력한 값을 얻어 검사
  • 사용법
  • ListView에서 inputFiled Add를 Form에 옮길 때, 또한 이 Add를 Custom Validator의 List
  • 에 옮긴다
  • Form에서 Custom Validtor
  • 설정
    코드
    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

    좋은 웹페이지 즐겨찾기