как использовать макрос в ftl - PullRequest
0 голосов
/ 16 февраля 2012

У меня полная путаница в реализации макроса и функций в ftl. Можно ли добавить полезную информацию?

  and what is the difference between macro and function in ftl

Спасибо

Ответы [ 2 ]

4 голосов
/ 16 февраля 2012

Разница между макросами и функциями: макросы предназначены для генерации разметки (или другого длинного текста) и для управления потоком и побочными эффектами в целом. Функции предназначены для вычисления других видов значений, включая короткий простой текст, и обычно не имеют побочных эффектов. Это отражается в том факте, что у макросов нет возвращаемого значения, они просто выводятся непосредственно на вывод. Также вывод макросов не экранируется #escape. По этой же причине они похожи на теги HTML, а ${myFunction()} - нет.

Кроме этого, что вас смущает? Я предполагаю, что вы нашли Руководство FreeMarker.

0 голосов
/ 11 марта 2019

Ниже приведен ответ, как использовать макросы в FTL:)

Input-smooks.Json:

 { 
        "title": "Payment Received", 
        "firstName": "vijay", 
        "lastName": "dwivedi", 
        "accountId": "123", 
        "paymentId": "456", 
        "accounts": [ 
            { 
                "accountId": "1111", 
                "paymentId": "1112" 
            }, 
            { 
                "accountId": "2111", 
                "paymentId": "2112" 
            }, 
            { 
                "accountId": "3111",
                "paymentId": "3112" 
            } 
        ] 
    }

Файл Smook-config.xml:

Определить макросы один раз и использовать в качестве функции всякий раз, когда требуется

<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
    xmlns:json="http://www.milyn.org/xsd/smooks/json-1.1.xsd" xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd">

    <params>
        <param name="stream.filter.type">SAX</param>
        <param name="default.serialization.on">false</param>
    </params>

    <json:reader rootName="json" keyWhitspaceReplacement="_">
        <json:keyMap>
            <json:key from="date&amp;time" to="date_and_time" />
        </json:keyMap>
    </json:reader>

    <resource-config selector="json">
        <resource>org.milyn.delivery.DomModelCreator</resource>
    </resource-config>

    <ftl:freemarker applyOnElement="json">
        <ftl:template>
            <!-- 
            <#macro PopulateTasks task_list>
                <#list task_list as att1>
                    "accountId": "${att1.accountId}"
                    "paymentId": "${att1.paymentId}"
                </#list>
            </#macro>

            <@PopulateTasks json.accounts.element/>

             -->
        </ftl:template>
    </ftl:freemarker>

</smooks-resource-list>



  public static void main(String[] args) throws SmooksException, IOException, SAXException {

        long start = System.currentTimeMillis();
        Smooks smooks = new Smooks("src/main/resources/smooks-config.xml");

        try {
            smooks.filterSource(new StreamSource(new 
            FileInputStream("src/main/resources/input_smooks.json")), new 
            StreamResult(System.out));

        } finally {
            smooks.close();
        }
    }

<@PopulateTasks json.accounts.element/> это способ вызова макросов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...