2013-03-27 62 views
0

我正在阅读核心JavaServer Faces(3e)书。getClientBehaviors()方法没有从UIComponentBase继承,同时扩展了UIInput

我想从本书的第11章运行ajax spinner代码。

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

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

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

然而,如每JSF spec - 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

什么你有事情有点棘手。你是正确的,UIInput延伸UIComponentBase,这确实实现getClientBehaviors()。然而,要实现ClientBehaviorHolder,其中有一个公共getClientBehaviors()方法。

要实现必须有一个方法,显然它不可能来自你正在扩展类的类。我会做的是继续前进的实现该法是一个简单的返回值为空:

return Collections.emptyMap();