JSTL的后台使用总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSTL的后台使用总结相关的知识,希望对你有一定的参考价值。

1.首先定义标签函数集合:

       Map<String, Method> fns = new HashMap<String, Method>();   (1)

将表达式中的方法 放在定义的fns 中,定义的方法确定是静态的,格式如下:

public static String functionName(boolean success, String input0, String input1) {
    return success == true ? input0 : input1;
}

 

 

2.实现VariableResolver接口,该接口是jstl 定义的,供解析EL表达式使用。demo

private class MapVariableResolver implements VariableResolver {
    private Map<String, Object> map;

    public MapVariableResolver(MethodInvocation mi, Object result, HttpServletRequest request) {
        Object[] args = mi.getArguments();
        map = new LinkedHashMap<String, Object>(args.length + 2);
        for (int i = 0; i < args.length; i++) {
            map.put("username", args[i]);
            if ((!map.containsKey("ctx"))) {
                map.put("ctx", new LogContextImpl(request));
            }
        }
        Map<String, Boolean> resultMap = new HashMap<>();
        if (result != null && result instanceof UserDetails) {
            resultMap.put("success", true);
        } else {
            resultMap.put("success", false);
        }
        map.put("ret", resultMap);
    }

    @Override
    public Object resolveVariable(String arg0, Object arg1) throws ELException {
        if (map.containsKey(arg0)) {
            return map.get(arg0);
        }
        return "[no named(" + arg0 + ") value]";
    }
}

3.配置ELEvaluator ,进行解析。

    使用如下:

       MapVariableResolver vr = new MapVariableResolver(mi, result, request);
        // ELEvaluator 用来 evaluate
        ELEvaluator eval = new ELEvaluator(vr);
        // 允许包含函数

        System.setProperty("javax.servlet.jsp.functions.allowed", "true");

     注意:msg 要转义

       msg = msg.replaceAll("‘", "\"");
                // 执行evaluate,String.class表示eval返回的类型,fns是函数映射map,fn是函数前缀
                Object obj = eval.evaluate(msg, null, String.class, fns, "fn");

 

到处jstl后台使用介绍完毕。

 

 

效果如下:表达式: 输入:${username}从${ctx.ip}登录, 登录${if(ret.success,‘成功‘,‘失败‘)}

Map={username =xxx,ctx={ip=127.0.0.1},ret={success=true}};

输出:xxx从127.0.0.1登录,登录成功






























以上是关于JSTL的后台使用总结的主要内容,如果未能解决你的问题,请参考以下文章

Java jstl标签使用总结

阿里后台开发不知名部门总结

阿里后台开发不知名部门总结

工作总结--如何定位web系统前后台的bug,以及bug分析/测试感想

JSTL标签总结

jstl 总结