扩展指令报:Shared method not found

使用JFinal,版本为3.2,做指令扩展,比如以下代码,实现检查一个字符串中是否包含“?”(问号),代码如下:

public class IndexOfQ extends Directive {
 
    private Expr valueExpr;
     
    public IndexOfQ() {
        // TODO Auto-generated constructor stub
    }
    @Override
    public void exec(Env env, Scope scope, Writer writer) {
        // TODO Auto-generated method stub
        Object value = valueExpr.eval(scope);
        System.out.println(getClass() + ",value=" + value.toString());
        String valueString = value.toString();
        if(doDeal(valueString)) {
            write(writer,"1");
        } else {
            write(writer, "0");
        }
        stat.exec(env, scope, writer); //这句是后面加的,试了多种方式都不行。
    }
     
    public void setExprList(ExprList exprList) {
        valueExpr = exprList.getExprArray()[0];
    }
 
    public boolean doDeal(String str) {
        if(str.indexOf("?") > 0) {
            return true;
        } else {
            return false;
        }
    }
}

在JFinalConfig的实现类中的configEngine方法中增加:

me.addDirective("IndexOfQ", new IndexOfQ());

在html页面中调用:

#if(IndexOfQ("abc.action?value=1") == '1')  包含问号 #else 不包含问号 #end

报错如下:
com.jfinal.render.RenderException: com.jfinal.template.TemplateException: Shared method not found: IndexOfQ(java.lang.String)

请问一下,如何解决?

非常感谢!

评论区

JFinal

2017-09-27 11:33

你把指令扩展与 shared method 搞混了,再仔细看一下手册, shared method 是利用普通的 java 类,而不需要实现任何接口或继承任何类

sen_linzhiwang

2017-09-27 11:56

犯了一个比较低级折错误,使用addSharedMethod解决。不好意思,打扰了。

sen_linzhiwang

2017-09-27 11:57

@JFinal 非常感谢!

热门反馈

扫码入社