Scr*_*ree 6 el cdi managed-bean default-method
我正在尝试设置自己的JSF标记库.因此,我创建了一个带有支持接口的复合组件作为蓝图,为该组件构建支持bean.
public interface CompLogin {
String getUsername();
void setUsername(String username);
String getPassword();
void setPassword(String password);
String validateLogin();
default String getPasswordWatermark() {
return "Passwort";
}
default String getUsernameWatermark() {
return "Loginname:";
}
default String getLoginButtonValue() {
return "Login";
}
}
Run Code Online (Sandbox Code Playgroud)
所以我有登录网站的密码,用户名和验证方法.另外,O想要为Inputtext水印和Button提供一些默认的namings.如果执行人员想要改变它,他可以.
我使用自己的JSF标记在真实应用程序的Backing bean中实现了这个接口.
@Named
@RequestScoped
public class Login implements Serializable, CompLogin {
private String username;
private String password;
@Override
public String getUsername() {
return username;
}
@Override
public void setUsername(String username) {
this.username = username;
}
@Override
public String getPassword() {
return password;
}
@Override
public void setPassword(String password) {
this.password = password;
}
@Override
public String validateLogin() {
System.out.println(username + " " + password);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为它可以这样工作.但我得到错误:'引起:javax.el.PropertyNotFoundException:类'Login'没有属性'usernameWatermark'.
看起来接口的默认实现并没有在我的实现bean中继承.为什么以及如何为我的组件提供默认实现?
编辑:我尝试了以下内容,以省略对接口默认方法conecpt的误解.我把我的接口和实现类放在一个普通的java项目中,试图通过Login类访问getLoginButtonValue.
public class Main {
public static void main(String[] args) {
Login log = new Login();
System.out.println(log.getLoginButtonValue());
}
}
Run Code Online (Sandbox Code Playgroud)
效果很好.打印出正确的字符串.无需实现默认方法来访问它们.那问题出在哪里?也许有像cdi,bean-resolver或者其他东西不知道这个java 8概念的东西?
| 归档时间: |
|
| 查看次数: |
948 次 |
| 最近记录: |