我目前正在阅读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; }
}
答案 0 :(得分:0)
你发生的事情有点棘手。你是对的,UIInput扩展了UIComponentBase,它确实实现了getClientBehaviors()。但是,您正在实现ClientBehaviorHolder,它具有公共getClientBehaviors()方法。
你正在实现的类必须有这种方法,显然它不能来自你正在扩展的类。我要做的是继续使用一个简单的空返回值的方法,如:
return Collections.emptyMap();