0

ピックリスト内で検証を試みているため、ピックリストに追加できるアイテムは 1 つまでです。しかし、pickList 内でバリデーターメソッドを使用すると、次のエラーが発生します。誰かが私が間違っていることを教えてくれますか?

   java.lang.IllegalAccessException: Class javax/faces/component/UIComponentBase illegally accessing " " class controller/testManagedBean$1 
        at java.lang.J9VMInternals.newInstanceImpl(Native Method)
        at java.lang.Class.newInstance(Class.java:1355)
        at javax.faces.component.UIComponentBase.restoreAttachedState(UIComponentBase.java:1598)






public void onTransfer(TransferEvent event) {
        PickList picklist = (PickList) event.getComponent();
        picklist.addValidator(new Validator() {

            @Override
            public void validate(FacesContext arg0, UIComponent arg1, Object arg2)
                    throws ValidatorException {
                System.out.println("test");                     
            }
        });
4

1 に答える 1

0

例外は非常に単純に見えます: コンポーネントのライフサイクルの後半にバリデーターを追加しようとしています。また、これについて正式に話すことはできませんが、バリデータ インスタンスを匿名にすることは不可能だと思います。JSF 内でバリデーターが出現するたびに、ある種の ID が必要です。つまり、Bean またはトップレベルのメソッドとして独立してアドレス指定できる必要がある可能性があります。validator検証をどちらかとして指定する方が単純に安全です

  1. ピックリストのメソッド定義

    <p:pickList id="pickList" validator="#{pickListBean.validateSelection}" value="#{pickListBean.cities}" var="city" itemLabel="#{city}" itemValue="#{city}" />  
    

    そして、バッキング Bean で、トップレベルのメソッドとして:

    public void validateSelection(FacesContext arg0, UIComponent arg1, Object arg2)
                throws ValidatorException {
            System.out.println("test");                     
        }
    }
    
  2. Validator の本格的なスタンドアロン実装

    @FacesValidator("myValidator")
    MyValidator implements Validator{
    
    public void validate(FacesContext arg0, UIComponent arg1, Object arg2)
                throws ValidatorException {
            System.out.println("test");                     
        }
      }
    }
    
于 2013-03-25T14:08:56.317 に答える