首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在EL中,Java 8缺省接口方法未被识别为受管bean属性

在EL中,Java 8缺省接口方法未被识别为受管bean属性
EN

Stack Overflow用户
提问于 2016-05-13 17:00:32
回答 2查看 1.3K关注 0票数 6

我正在尝试设置我自己的JSF标签库。因此,我创建了一个带有支持接口的复合组件作为蓝图,为该组件构建支持bean。

代码语言:javascript
复制
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";
   }
}

所以我有一个登录网站的密码,用户名和验证方法。此外,我还想为Inputtext水印和按钮提供一些默认名称。如果实施者想要改变它,他可以。

我使用自己的JSF标记在一个实际应用程序的支持bean中实现了这个接口。

代码语言:javascript
复制
@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;
    }
}

我认为它可以这样工作。但我得到的错误是:“由:javax.el.PropertyNotFoundException引起的:'Login‘类没有’usernameWatermark‘属性。”

在我的实现bean中似乎没有继承接口的默认实现。为什么我可以做什么来为我的组件提供默认实现?

编辑:我尝试了以下几点来忽略对接口默认方法概念的误解。我在一个普通的java项目中使用了我的接口和der实现类,试图通过Login类访问getLoginButtonValue。

代码语言:javascript
复制
public class Main {

    public static void main(String[] args) {
        Login log = new Login();
        System.out.println(log.getLoginButtonValue());
    }
}

效果非常好。打印出正确的字符串。不需要实现访问它们的默认方法。那么问题出在哪里呢?也许有像cdi,bean解析器之类的东西没有意识到这个java8的概念?

EN

回答 2

Stack Overflow用户

发布于 2017-05-30 17:28:05

使用Apache EL时,这是通过调用默认方法的全名来实现的。在你的代码中尝试这样使用它:

代码语言:javascript
复制
#{login.getUsernameWatermark()}
票数 4
EN

Stack Overflow用户

发布于 2017-04-10 18:56:39

这个问题很可能是因为EL依赖反射来找到适当的访问器方法,但是对于默认方法来说,这样做是失败的。

考虑实现一个与here类似的自定义ELResolver。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37205642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档