在扩展UIInput时,getClientBehaviors()方法不会从UIComponentBase继承

时间:2013-03-27 17:25:39

标签: ajax jsf-2 custom-component mojarra

我目前正在阅读Core JavaServer Faces(3e)一书。

我正在尝试从本书的第11章开始运行ajax spinner代码。

我正在使用Oracle企业包进行eclipse,weblogic 10.3.5服务器& Mojarra impl。

但是UISpinner类显示以下错误消息:

  

“UISpinner类型必须实现继承的抽象方法   ClientBehaviorHolder.getClientBehaviors()“

但是,根据jsf规范,UIComponentBase类实现了UISpinner类继承的getClientBehaviors()方法。仍然为什么我收到这个错误?请帮忙。

这是UISpinner类的实现:

package com.corejsf;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import javax.faces.component.FacesComponent;
import javax.faces.component.UIInput;
import javax.faces.component.behavior.ClientBehavior;
import javax.faces.component.behavior.ClientBehaviorHolder;
import javax.faces.convert.IntegerConverter;

@FacesComponent("com.corejsf.Spinner")
public class UISpinner extends UIInput implements ClientBehaviorHolder {

   private static List<String> eventNames = Arrays.asList("click");

   public UISpinner() {
      setConverter(new IntegerConverter()); 
         // to convert the submitted value
      setRendererType("com.corejsf.JSSpinner");  
         // this component has a renderer
   }

   public String getDefaultEventName() { return "click"; }

   public Collection<String> getEventNames() { return eventNames; }
}

1 个答案:

答案 0 :(得分:0)

你发生的事情有点棘手。你是对的,UIInput扩展了UIComponentBase,它确实实现了getClientBehaviors()。但是,您正在实现ClientBehaviorHolder,它具有公共getClientBehaviors()方法。

你正在实现的类必须有这种方法,显然它不能来自你正在扩展的类。我要做的是继续使用一个简单的空返回值的方法,如:

return Collections.emptyMap();