使用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