2016-08-22 2 views
2

Ich versuche ein dynamisches HTML mit Java und dem Webfirmframework zu generieren.Wie füge ich eine Komponente zu einem bestehenden HTML mit Webfirmframework hinzu?

Gibt es eine Möglichkeit, einzelne Komponenten wie Table und Div zu erstellen, ohne sie in Html() einzuschließen? Ich habe mehr als 10 Stück Geschäftslogik und jede generiert eine individuelle Tabelle von Daten. Alle diese über 10 Tabellen müssen in einem HTML-Code angezeigt werden.

Das Erstellen einer einzigen Methode zum Generieren all dieser über 10 Tabellen macht den Code unlesbar.

Anforderung ist in der Lage sein, einzelne Komponenten zu erstellen und dann verketten sie zusammen, um die endgültige HTML-Seite zu generieren.

Dies ist, was ich versucht habe und es wirft Fehler.

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"); 
        }}; 
       }}; 
      }}; 
     }}; 
    } 

Antwort

2

Das erste Argument einer Tag-Klasse ist die übergeordnete Klasse, in Ihrem Fall Table Tag kein gültiges Elternteil hat, so dass Sie null statt this Argument übergeben, wenn Sie erstellen möchten Tabelle ohne äußeren HTML-Tag.

Ihren Code ändern, wie

folgt
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()); 
} 

Aber für Ihren tatsächlichen Bedarf, hier ist der Beispielcode

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()); 

    } 
} 

Diese

<!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> 

aktualisiert gedruckt wird

Seit wffweb 2 version können Sie die appendChild-Methode zu add child to a tag verwenden.

+2

Sehr nützliche und sehr klare Antwort. Danke! – user811433

+0

@ user811433 Willkommen! –

Verwandte Themen