0

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

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

我正在为 Eclipse、weblogic 10.3.5 服务器和 Mojarra impl 使用 Oracle 企业包。

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

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

但是,根据 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; }
}
4

1 回答 1

0

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

您正在实现的类必须具有该方法,并且显然它不能来自您正在扩展的类。我要做的是使用一个简单的空返回值来实现该方法,例如:

return Collections.emptyMap();
于 2013-03-28T18:25:51.063 回答