0

私は Vaadin 7 を試してきました。まず、私は Vaadin の初心者であり、JAVA の永続性にあまり慣れていないことを管理する必要があります。したがって、Beanの検証とその使用方法を学ぼうとしています。いくつかのチュートリアルに従いましたが、Vaadin 7 の最新かつ正しいものを判断するのは非常に困難です。それにもかかわらず、JPA コンテナーと BeanValidator をダウンロードして使用しようとしましたが、機能しません。私が使用しているコードは次のとおりです。

package com.example.firstvaadin;

import java.io.Serializable;

import org.hibernate.validator.constraints.Email;
import javax.validation.constraints.*;

public class RegisterBean implements Serializable{

    public  RegisterBean(String email){
        this.email = email;
    }

    @Size(min = 5, max = 50)
    private String email;

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }
}

RegisterBean rbean = new RegisterBean("");
BeanItem<RegisterBean> item = new BeanItem<RegisterBean>(rbean);
TextField email = new TextField("email",item.getItemProperty("email"));
email.setImmediate(true);
layout.addComponent(email);
email.setNullRepresentation("");

しかし、次のコードで実行時例外が発生しました: email.addValidator(new BeanValidator(RegisterBean.class, "email"));

The exception is:
    aused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method buttonClick in com.example.firstvaadin.LoginView$1 failed.
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:528)
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:167)
    at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:984)
    at com.vaadin.ui.Button.fireClick(Button.java:367)
    at com.vaadin.ui.Button$1.click(Button.java:56)
    ... 28 more
Caused by: java.lang.NoClassDefFoundError: javax/validation/MessageInterpolator$Context
    at com.example.firstvaadin.RegisterView.<init>(RegisterView.java:55)
    at com.example.firstvaadin.LoginView$1.buttonClick(LoginView.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508)
    ... 32 more
Caused by: java.lang.ClassNotFoundException: javax.validation.MessageInterpolator$Context
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
    ... 39 more

どのクラスが欠落しているかわかりません。休止状態の jar と validation-api.jar を追加しました。

誰か手を貸してくれませんか?

また、/WebContent/WEB-INF/lib ディレクトリにあり、Eclipse でクラスパスとして追加された jar ファイルのリストを以下に示します。

classmate-0.8.0.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-search-engine-4.3.0.Alpha1.jar
hibernate-search-orm-4.3.0.Alpha1.jar
hibernate-validator-5.0.0.Final.jar
hibernate-validator-annotation-processor-5.0.0.Final.jar
hibernate-validator-cdi-5.0.0.Final.jar
javax.el-2.2.4.jar
javax.el-api-2.2.4.jar
jboss-logging-3.1.1.GA.jar
joda-time-2.1.jar
jsoup-1.7.1.jar
log4j-1.2.17.jar
mysql-connector-java-5.1.22-bin.jar
vaadin-sqlcontainer-1.1.0.jar
validation-api-1.0.0.GA.jar
validation-api-1.1.0.Final.jar

classnotfound 例外はなくなりましたが、新しい例外が追加されました:

java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider; org.hibernate.validator.internal.engine.ValidatorFactoryImpl で。 com.vaadin.data.validator.BeanValidator.getJavaxBeanValidatorFactory(BeanValidator.java:167) で com.vaadin.data.validator で javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111) で buildValidatorFactory(ConfigurationImpl.java:217) .BeanValidator.getJavaxBeanValidator(BeanValidator.java:182) の com.vaadin.data.validator.BeanValidator.validate(BeanValidator.java:115) の com.vaadin.ui.AbstractField。

4

4 に答える 4

1

プロジェクトにさらに依存関係を追加する必要があります。私はこれで解決しました:

    <!--- Dependencies for validating Beans in Vaadin -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <version>3.2.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.10</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.10</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.1.3.Final</version>
    </dependency>

これで十分です!messageフィールドをjavax.validation.constraints表記に入れるか、国際化されたものをプロジェクトのプロパティに入れ、のmessageようなデフォルト値を見て、メッセージを指定することができますjavax.validation.constraints.Size.message

于 2015-03-13T16:35:17.533 に答える