<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 2.15 定制模板引擎 Beetl在線體驗([http://ibeetl.com/beetlonline/](http://ibeetl.com/beetlonline/))面臨一個挑戰,允許用戶輸入任何腳本做練習或者分享代碼。但又需要防止用戶輸入惡意的代碼,如 ```javascript <% while(true){ //其他代碼 } %> ``` 此時,需要定制模板引擎,遇到while循環的時候,應該限制循環次數,譬如,在線體驗限制最多循環5次,這是通過定義擴展模板引擎來實現的,以jar包自帶的實例代碼OnlineTemplateEngine來說明 ```java public class OnlineTemplateEngine extends DefaultTemplateEngine { public static int MAX = 5; public static String ERROR = "錯誤:在線引擎不允許循環次數超過 " + MAX; @Override protected GrammarCreator getGrammerCreator(GroupTemplate gt) { GrammarCreator grammar = new OnlineGrammarCreator(); return grammar; } } ``` 擴展DefaultTemplateEngine,重載getGrammerCreator方法,返回一個我們自己的語法定義類OnlineGrammarCreator OnlineGrammarCreator繼承了默認的 ```java static class OnlineGrammarCreator extends GrammarCreator { @Override public WhileStatement createWhile(Expression exp, Statement whileBody, GrammarToken token) { WhileStatement whileStat = new RestrictWhileStatement(exp, whileBody, token); return whileStat; } } ``` 需要對for循環重新定義,使用新的 RestrictWhileStatement,定義如下 ~~~java static class RestrictWhileStatement extends WhileStatement { public RestrictWhileStatement(Expression exp, Statement whileBody, GrammarToken token) { super(exp, whileBody, token); } @Override public void execute(Context ctx) { int i = 0; while (i < OnlineTemplateEngine.MAX) { Object result = exp.evaluate(ctx); if (result instanceof Boolean) { if ((Boolean) result) { whileBody.execute(ctx); } else { break; } } else { BeetlException be = new BeetlException(BeetlException.BOOLEAN_EXPECTED_ERROR); be.token = exp.token; throw be; } i++; } if (i >= OnlineTemplateEngine.MAX) { try { ctx.byteWriter.writeString(ERROR); } catch (IOException e) { // ignore } } } } ~~~ 完成這些代碼后,在配置文件中申明使用新的引擎 ```properties ENGINE=org.beetl.core.engine.OnlineTemplateEngine ``` 這樣就完成了模板引擎定制。 > BeetlSQL 正是支持定制,所以才把## 占位符輸出"?",而不是字面值,${} 負責輸出字面值,可以查看BeetlSQL的org.beetl.sql.core.engine.SQLTemplateEngine
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看