如何使用Webfirmframework将组件添加到现有HTML?

时间:2016-08-22 20:43:56

标签: java html wffweb

我正在尝试使用Java和webfirmframework生成动态HTML。

有没有办法构建像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");
                    }};
                }};
            }};
        }};
    }

1 个答案:

答案 0 :(得分:2)

标记类的第一个参数是其父类,在您的情况下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 version起,您可以使用appendChild方法add child to a tag