Вопрос:

Как добавить компонент в существующий HTML с помощью Webfirmframework?

java html wffweb

153 просмотра

1 ответ

1549 Репутация автора

Я пытаюсь сгенерировать динамический HTML, используя Java и webfirmframework.

Есть ли способ построить отдельные компоненты, такие как Table и Div, не заключая их в Html ()? У меня есть более 10 частей бизнес-логики, и каждый генерирует отдельную таблицу данных. Все эти 10+ таблиц должны отображаться в HTML.

Создание единого метода для генерации всех этих 10+ таблиц делает код нечитаемым.

Требование состоит в том, чтобы иметь возможность создавать отдельные компоненты, а затем объединять их вместе для создания окончательной HTML-страницы.

Это то, что я пытался, и это выдает ошибки.

The constructor Table(MyServiceClass, CustomAttribute, CustomAttribute) is undefined

private void generateTable(final MyCSS hcCss) {
        new Table(this,             
            new CustomAttribute("cellspacing", "0"),
            new CustomAttribute("cellpadding", "3")) {{
            new TBody(this) {{
                new Tr(this) {{
                    new Td(this,
                        new Style("padding: 3px")) {{
                        new NoTag(this, "XXXX");
                    }};
                }};
            }};
        }};
    }
Автор: user811433 Источник Размещён: 22.08.2016 08:43

Ответы (1)


2 плюса

1 Репутация автора

Решение

Первым аргументом класса тега является его родительский класс, в вашем случае Tableтег не имеет допустимого родителя, поэтому вы должны передать nullвместо thisаргумента, если вы хотите создать таблицу без внешнего HTML-тега.

Измените ваш код следующим образом

private void generateTable(final MyCSS hcCss) {

        Table table = new Table(null,             
            new CustomAttribute("cellspacing", "0"),
            new CustomAttribute("cellpadding", "3")) {{
            new TBody(this) {{
                new Tr(this) {{
                    new Td(this,
                        new Style("padding: 3px")) {{
                        new NoTag(this, "XXXX");
                    }};
                }};
            }};
        }};

        System.out.println(table.toHtmlString());
}

Но для вашего фактического требования, вот пример кода

public class TableComponentMethods {

    public static void embedTable1In(Body body) {

        new Table(body,             
            new CustomAttribute("cellspacing", "0"),
            new CustomAttribute("cellpadding", "3")) {{
            new TBody(this) {{
                new Tr(this) {{
                    new Td(this,
                        new Style("padding: 3px")) {{
                        new NoTag(this, "XXXX");
                    }};
                }};
            }};
        }};

    }

    public static void embedTable2In(Body body) {

        new Table(body,             
            new CustomAttribute("cellspacing", "0"),
            new CustomAttribute("cellpadding", "3")) {{
            new TBody(this) {{
                new Tr(this) {{
                    new Td(this,
                        new Style("padding: 3px")) {{
                        new NoTag(this, "Table 2");
                    }};
                }};
            }};
        }};

    }

}

public class WffWebTest extends Html {

    private Body body;

    public WffWebTest() {
        super(null);
        setPrependDocType(true);
        develop();
    }

    private void develop() {
        body = new Body(this);
    }

    public Body getBody() {
        return body;
    }

    public static void main(String[] args) {
        WffWebTest finalHtml = new WffWebTest();

        // this will add table as a child in Body tag
        TableComponentMethods.embedTable1In(finalHtml.getBody());
        TableComponentMethods.embedTable2In(finalHtml.getBody());

        System.out.println(finalHtml.toHtmlString());

    }
}

Это напечатает

<!DOCTYPE html>
<html>

<body>
    <table cellspacing="0" cellpadding="3">
        <tbody>
            <tr>
                <td style="padding: 3px;">XXXX</td>
            </tr>
        </tbody>
    </table>
    <table cellspacing="0" cellpadding="3">
        <tbody>
            <tr>
                <td style="padding: 3px;">Table 2</td>
            </tr>
        </tbody>
    </table>
</body>

</html>

обновленный

Начиная с версии wffweb 2 , вы можете использовать appendChildметод для добавления дочернего элемента в тег .

Автор: Adolphus Ald Размещён: 23.08.2016 02:37
Вопросы из категории :
32x32