Показать тег, ранее скрытый с помощью if case в тимелеафе - PullRequest
2 голосов
/ 05 мая 2020

У меня есть следующее xml:

<Child name="Filip" surname="Trajkovski">
    <Birtday>01.01.1999</Birtday>
    <SubChild th:if="${subChild.exist}" name="Nikola" surname="Tesla">
        <Birtday>01.01.1990</Birtday>
        <Parent name="Unknown" surname="Uknown">
            <Birthday>01.01.1990</Birthday>
        </Parent>
    </SubChild>
</Child>

Я заполняю этот тег данными из java, и в некоторых случаях у меня нет этого SubChild, для которого у меня есть это if case, но у меня всегда есть родитель, который мне нужно показать.

Я хочу добиться даже в случае, когда этот SubChild не существует, и он скрыт в случае if, чтобы показать родительский тег, поскольку он всегда будет там. Чтобы сделать этот тег Parent обязательным, я бы сказал.

У меня есть одно решение:

<Child name="Filip" surname="Trajkovski">
    <Birtday>01.01.1999</Birtday>
    <SubChild th:if="${subChild.exist}" name="Nikola" surname="Tesla">
        <Birtday>01.01.1990</Birtday>
        <Parent name="Unknown" surname="Uknown">
            <Birthday>01.01.1990</Birthday>
        </Parent>
    </SubChild>
    <Parent th:if="${!subChild.exist}" name="Unknown" surname="Uknown">
        <Birthday>01.01.1990</Birthday>
    </Parent>
</Child>

Но в этом решении есть повторение родительского тега дважды. И в моем реальном сценарии это огромный тег, который я не хочу повторять. Мой вопрос: можно ли отобразить этот тег, даже если ранее упомянутое if case неверно, без повторения того же кода для Родителя.

В конечном итоге мой результат должен быть:

<Child name="Filip" surname="Trajkovski">
    <Birtday>01.01.1999</Birtday>
    <Parent name="Unknown" surname="Uknown">
        <Birthday>01.01.1990</Birthday>
    </Parent>
</Child>

1 Ответ

2 голосов
/ 06 мая 2020

Используя фрагменты, вы можете сделать следующее:

Создать фрагмент для «родительского» раздела вашего XML. В моем примере это находится в файле с именем «parent. xml?:

<?xml version="1.0" encoding="UTF-8"?>

<th:block th:fragment="parent_fragment">
    <Parent name="Unknown" surname="Uknown">
        <Birthday>01.01.1990</Birthday>
    </Parent>
</th:block>

Затем используйте фрагмент в основном XML следующим образом:

(просто обратите внимание, для собственного тестирования я изменил ваше условие if - вы можете изменить его обратно на свою версию)

<Child name="Filip" surname="Trajkovski">
    <Birtday>01.01.1999</Birtday>
    <th:block th:if="${subChild} != null">
    <SubChild name="Nikola" surname="Tesla">
        <Birtday>01.01.1990</Birtday>
        <th:block th:replace = "parent.xml :: parent_fragment"></th:block>
    </SubChild>        
    </th:block>
    <th:block th:if="${subChild} == null">
        <th:block th:replace = "parent.xml :: parent_fragment"></th:block>
    </th:block>
</Child>

Это генерирует два вывода XML следующим образом:

Когда дочерний ребенок делает не существует (или, в моем случае, когда он имеет значение NULL):

<Child name="Filip" surname="Trajkovski">
    <Birtday>01.01.1999</Birtday>
    <Parent name="Unknown" surname="Uknown">
        <Birthday>01.01.1990</Birthday>
    </Parent>
</Child>

Когда дочерний элемент существует (не равен NULL):

<Child name="Filip" surname="Trajkovski">
    <Birtday>01.01.1999</Birtday>
    <SubChild name="Nikola" surname="Tesla">
        <Birtday>01.01.1990</Birtday>
        <Parent name="Unknown" surname="Uknown">
            <Birthday>01.01.1990</Birthday>
        </Parent>
    </SubChild>        
</Child>

Теперь вам нужно только определить ( потенциально очень большой) <parent>...</parent> раздел в одном месте.

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