Solon

solon.view.jsp

v2.7.3 </> markdown
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon.view.jsp</artifactId>
</dependency>

1、描述

视图扩展插件,为 Solon View 提供基于 jsp 的框架适配。

需要配合插件:

  • solon.boot.jetty + solon.boot.jetty.add.jsp

或者

  • solon.boot.undertow + solon.boot.undertow.add.jsp

2、应用示例

DemoController.java

//顺便,加个国际化在模板里的演法
@I18n
@Controller
public class DemoController{
    @Mapping("/test")
    public ModelAndView test() {
        ModelAndView model = new ModelAndView("jsp.jsp");
        model.put("title", "dock");
        model.put("msg", "你好 world!");

        return model;
    }
}

resources/WEB-INF/tags.tld

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">

    <description>自定义标签库</description>
    <tlib-version>1.1</tlib-version>
    <short-name>ct</short-name>
    <uri>/tags</uri>

    <tag>
        <name>footer</name>
        <tag-class>webapp.widget.FooterTag</tag-class>
        <body-content>empty</body-content>
    </tag>

</taglib>

resources/WEB-INF/templates/jsp.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ct" uri="/tags" %>
<!DOCTYPE html>
<html>
<head>
    <title>${title}</title>
</head>
<body>
jsp::${msg};i18n::${i18n.get("login.title")}

<ct:footer />
</body>
</html>

3、自定义标签示例

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class FooterTag extends TagSupport {
    @Override
    public int doStartTag() throws JspException {
        try {
            StringBuffer sb = new StringBuffer();
            sb.append("<div>").append("你好 world!").append("</div>");
            pageContext.getOut().write(sb.toString());
        } catch (Exception e) {
            EventBus.push(e);
        }

        return super.doStartTag();
    }

    @Override
    public int doEndTag() throws JspException {
        return super.doEndTag();
    }
}

再,以插件自带的权限验证标签为例:

public class AuthPermissionsTag extends TagSupport {
    @Override
    public int doStartTag() throws JspException {
        String nameStr = name;
        String logicalStr = logical;

        if (Utils.isEmpty(nameStr)) {
            return super.doStartTag();
        }

        String[] names = nameStr.split(",");

        if (names.length == 0) {
            return super.doStartTag();
        }


        if (AuthUtil.verifyPermissions(names, Logical.of(logicalStr))) {
            return TagSupport.EVAL_BODY_INCLUDE;
        } else {
            return super.doStartTag();
        }
    }


    String name;
    String logical;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLogical() {
        return logical;
    }

    public void setLogical(String logical) {
        this.logical = logical;
    }
}