找了一圈controller,似乎并没有直接的支持。在跟踪的时候发现,原来Engine早有了这样的功能。于是,
先写个BusController。
public abstract class BusController extends Controller {
    private static final RenderManager renderManager = RenderManager.me();
    public String renderToString(String content) {
        return renderManager.getEngine().getTemplateByString(content).renderToString(putRequestAttrsInMap(getRequest()));
    }
    public void renderHtmlWithTemplate(String content) {
        renderHtml(renderToString(content));
    }
    
    public Map<?, ?> putRequestAttrsInMap(HttpServletRequest request) {
        if (request == null) {
            return null;
        }
        Map<String, Object> map = new HashMap<String, Object>();
        Enumeration<String> names = request.getAttributeNames();
        while (names.hasMoreElements()) {
            String name = names.nextElement();
            Object value = request.getAttribute(name);
            map.put(name, value);
        }
        return map;
    }
}然后写个IndexController继承BusController就可以愉快地玩耍了。
@UrlMapping(url="/admin/index", routeClass=AdminRoutes.class, viewPath="/ooo")
public class IndexController extends BusController {
    public void index() {
        File file = new File("D:\\360Chrome\\page.html");
        String html = FileKit.onceReadToString(file);
        Kv kv = new Kv();
        kv.set("hello", "hello");
        kv.set("world", "world");
        setAttr("wo", kv);
        renderHtmlWithTemplate(html);
    }
}然后就可以传入任意路径的模板文件了,此时路由中的viewPath不会起作用。
当然也可以直接以拼接字符串的方式构造模板,有时我们需要从项目外读取模板文件,这是相当的方便啊!
FileKit.onceReadToString是从文件读取内容为字符串,网上一搜一大堆,代码就不贴出来了哈。
这是一个小小的技巧,主要功规于Engine中有getTemplateByString的方法。
 
 
 
 
 
