相关疑难解决方法(0)

Java 8接口默认方法似乎没有声明属性

在我的应用程序中,我遇到一个问题,当类中的getter仅在接口中默认(Java 8特性)时,结果没有Java Beans属性.即正常方法调用它只是作为一种标准方法,但对于通过"属性"访问它突然表现不同......

这是一个测试用例:

import java.beans.Introspector;
import java.util.Arrays;
import java.util.stream.Collectors;
import org.apache.commons.beanutils.PropertyUtils;

public class test
{
    public static void main (String[] arguments) throws Exception
    {
        // Normal language-level invocation, works fine.
        System.out.println (new Bean1 ().getFoo ());
        System.out.println (new Bean2 ().getFoo ());

        // Printing Java Beans properties; Bean2 doesn't have 'foo' property...
        System.out.println (Arrays.stream (Introspector.getBeanInfo (Bean1.class).getPropertyDescriptors ())
                            .map ((property) -> property.getName ())
                            .collect (Collectors.joining (", ")));
        System.out.println (Arrays.stream (Introspector.getBeanInfo (Bean2.class).getPropertyDescriptors ())
                            .map ((property) -> property.getName ())
                            .collect (Collectors.joining (", ")));

        // …
Run Code Online (Sandbox Code Playgroud)

java javabeans java-8 default-method

13
推荐指数
1
解决办法
1847
查看次数

Java 8默认接口方法在EL中未被识别为托管bean属性

我正在尝试设置自己的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() { …
Run Code Online (Sandbox Code Playgroud)

el cdi managed-bean default-method

6
推荐指数
1
解决办法
948
查看次数

Getter在默认方法JSF的接口中

我有一个具有以下默认方法的接口:

default Integer getCurrentYear() {return DateUtil.getYear();}
Run Code Online (Sandbox Code Playgroud)

我还有一个实现此接口的控制器,但它不会覆盖该方法.

public class NotifyController implements INotifyController
Run Code Online (Sandbox Code Playgroud)

我试图从我的xhtml访问此方法,如下所示:

#{notifyController.currentYear}
Run Code Online (Sandbox Code Playgroud)

但是,当我打开屏幕时,会出现以下错误:

The class 'br.com.viasoft.controller.notify.notifyController' does not have the property 'anoAtual'
Run Code Online (Sandbox Code Playgroud)

如果我从我的控制器的实例访问此方法,它返回正确的值,但是当我尝试从我的xhtml访问它作为"属性"时,它会发生此错误.

有没有办法从我的控制器的引用访问此接口属性,而无需实现该方法?

jsf el java-8 default-method propertynotfoundexception

6
推荐指数
1
解决办法
482
查看次数

如何在纯JSP中添加自定义VariableResolver

我希望以编程方式添加一个自定义的VariableResolver,当JSF或类似的东西没有使用时,所以在寻找1中提到的范围内的bean之前,EL会首先尝试解析其中的变量.

目标是使数据库中的对象可以通过其名称在EL中使用,并且可以将很多对象放入某个范围.

现在我将一个特殊的bean放在名为"z"的会话范围内,并且该bean扩展了Map接口,因此可以使用$ {z.address},$ {z.fullName}等表达式访问对象.我试图消除'z'.

如果我设法将我的解析器插入过滤器中更好(确保我会检查不要为每个Web请求多次执行此操作)

(编辑:也许我在谈论ELContext,如何放置我自己的VariableMapper或ELResolver或类似的东西)

java jsp el

4
推荐指数
1
解决办法
1184
查看次数