@Retention(value=RUNTIME) @Target(value={METHOD,FIELD}) @Documented public @interface ProvidesProperty
Property value in a Java class
whose instances back the items in a Container.
@ProvidesProperty and @ProvidesPropertySort method annotations
can be used to automatically generate a list of PropertyDefs and a PropertyExtractor using a
ProvidesPropertyScanner. This happens automatically when using the appropriate constructors of the various
Container classes in this package.
This annotation indicates that a read-only Vaadin Property having the specified name
and type derived from the method's return value is accessible by reading that method.
Annotated methods must have zero parameters.
For example:
// Container backing object class
public class User {
public static final String USERNAME_PROPERTY = "username";
public static final String REAL_NAME_PROPERTY = "realName";
private String username;
private String realName;
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
@ProvidesProperty // property name "realName" is implied by method name
public String getRealName() {
return this.realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
@ProvidesProperty(USERNAME_PROPERTY) // display usernames in fixed-width font
private Label usernameProperty() {
return new Label("<code>" + StringUtil.escapeHtml(this.username) + "</code>", ContentMode.HTML);
}
}
// User container class
public class UserContainer extends SimpleKeyedContainer<String, User> {
public UserContainer() {
super(User.class);
}
@Override
public String getKeyFor(User user) {
return user.getUsername();
}
}
// Create container holding all users
UserContainer container = new UserContainer();
container.load(this.userDAO.getAllUsers());
// Build table showing users
Table table = new Table();
table.setColumnHeader(User.USERNAME_PROPERTY, "User");
table.setColumnHeader(User.REAL_NAME_PROPERTY, "Name");
table.setVisibleColumns(User.USERNAME_PROPERTY, User.REAL_NAME_PROPERTY);
// Select user "jsmith" in the table
table.setValue("jsmith");
...
Some details regarding @ProvidesProperty annotations on methods:
@ProvidesProperty
annotations on other methods are ignored@ProvidesProperty annotations on interface methods are supported@ProvidesProperty, then the overridding method's annotation takes precedence.
@ProvidesProperty for the same
property name, then the declaration in the class which is a sub-type of the other
wins (if the two methods are delcared in the same class, an exception is thrown). This allows subclasses
to "override" which method supplies a given property.
To control how properties are sorted (e.g., in tables), see @ProvidesPropertySort.
ProvidesPropertySort,
ProvidesPropertyScannerpublic abstract String value
Copyright © 2017. All rights reserved.