blob: e375de2e95134e76648aa5b7f35643fe6cd5da86 [file] [log] [blame]
<!--
/***************************************************************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
***************************************************************************************************************************/
-->
HTML Methodology
<p>
The following examples show how different data types are represented in HTML.
They mirror how the data structures are represented in JSON.
</p>
<h5 class='topic'>Simple types</h5>
<p>
The representation for simple types mirror those produced by the XML serializer.
Tags are added to help differentiate data types when they cannot be inferred through reflection.
These tags are ignored by browsers and treated as plain text.
</p>
<table class='styled w800'>
<tr>
<th>Data type</th>
<th>JSON example</th>
<th>HTML</th>
</tr>
<tr>
<td>string</td>
<td class='code'><js>'foo'</js></td>
<td class='code'><xt>&lt;string&gt;</xt>foo<xt>&lt;/string&gt;</xt></td>
</tr>
<tr>
<td>boolean</td>
<td class='code'><jk>true</jk></td>
<td class='code'><xt>&lt;boolean&gt;</xt>true<xt>&lt;/boolean&gt;</xt></td>
</tr>
<tr>
<td>integer</td>
<td class='code'>123</td>
<td class='code'><xt>&lt;number&gt;</xt>123<xt>&lt;/number&gt;</xt></td>
</tr>
<tr>
<td>float</td>
<td class='code'>1.23</td>
<td class='code'><xt>&lt;number&gt;</xt>1.23<xt>&lt;/number&gt;</xt></td>
</tr>
<tr>
<td>null</td>
<td class='code'><jk>null</jk></td>
<td class='code'><xt>&lt;null/&gt;</xt></td>
</tr>
</table>
<h5 class='topic'>Maps</h5>
<p>
Maps and beans are represented as tables.
</p>
<p>
The <xa>_type</xa> attribute is added to differentiate between objects (maps/beans) and arrays
(arrays/collections).
</p>
<table class='styled w800'>
<tr>
<th>Data type</th>
<th>JSON example</th>
<th>HTML</th>
</tr>
<tr>
<td class='code'>
Map&lt;String,String&gt;
</td>
<td class='code'>
{
k1: <js>'v1'</js>
k2: <jk>null</jk>
}
</td>
<td class='code'><xt>
&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
&lt;td&gt;<xv>v1</xv>&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
</xt></td>
</tr>
<tr>
<td class='code'>
Map&lt;String,Number&gt;
</td>
<td class='code'>
{
k1: 123,
k2: 1.23,
k3: <jk>null</jk>
}
</td>
<td class='code'><xt>
&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
&lt;td&gt;<xv>123</xv>&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
&lt;td&gt;<xv>1.23</xv>&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k3</xv>&lt;/td&gt;
&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
</xt></td>
</tr>
<tr>
<td class='code'>
Map&lt;String,Object&gt;
</td>
<td class='code'>
{
k1: <js>'v1'</js>
k2: 123,
k3: 1.23,
k4: <jk>true</jk>,
k5: <jk>null</jk>
}
</td>
<td class='code'><xt>
&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
&lt;td&gt;<xv>v1</xv>&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
&lt;td&gt;&lt;number&gt;<xv>123</xv>&lt;/number&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k3</xv>&lt;/td&gt;
&lt;td&gt;&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k4</xv>&lt;/td&gt;
&lt;td&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k5</xv>&lt;/td&gt;
&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
</xt></td>
</tr>
</table>
<h5 class='topic'>Arrays</h5>
<p>
Collections and arrays are represented as ordered lists.
</p>
<table class='styled w800'>
<tr>
<th>Data type</th>
<th>JSON example</th>
<th>HTML</th>
</tr>
<tr>
<td class='code'>
String[]
</td>
<td class='code'>
[
<js>'foo'</js>
<jk>null</jk>
]
</td>
<td class='code'><xt>
&lt;ul&gt;
&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
&lt;/ul&gt;
</xt></td>
</tr>
<tr>
<td class='code'>
Number[]
</td>
<td class='code'>
[
123,
1.23,
<jk>null</jk>
]
</td>
<td class='code'><xt>
&lt;ul&gt;
&lt;li&gt;<xv>123</xv>&lt;/li&gt;
&lt;li&gt;<xv>1.23</xv>&lt;/li&gt;
&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
&lt;/ul&gt;
</xt></td>
</tr>
<tr>
<td class='code'>
Object[]
</td>
<td class='code'>
[
<js>'foo'</js>,
123,
1.23,
<jk>true</jk>,
<jk>null</jk>
]
</td>
<td class='code'><xt>
&lt;ul&gt;
&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
&lt;li&gt;&lt;number&gt;<xv>123</xv>&lt;/number&gt;&lt;/li&gt;
&lt;li&gt;&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;&lt;/li&gt;
&lt;li&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/li&gt;
&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
&lt;/ul&gt;
</xt></td>
</tr>
<tr>
<td class='code'>
String[][]
</td>
<td class='code'>
[
[<js>'foo'</js>, <jk>null</jk>],
<jk>null</jk>,
]
</td>
<td class='code'><xt>
&lt;ul&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
&lt;/ul&gt;
</xt></td>
</tr>
<tr>
<td class='code'>
<jk>int</jk>[]
</td>
<td class='code'>
[
123
]
</td>
<td class='code'><xt>
&lt;ul&gt;
&lt;li&gt;<xv>123</xv>&lt;/li&gt;
&lt;/ul&gt;
</xt></td>
</tr>
<tr>
<td class='code'>
<jk>boolean</jk>[]
</td>
<td class='code'>
[
<jk>true</jk>
]
</td>
<td class='code'><xt>
&lt;ul&gt;
&lt;li&gt;<xv>true</xv>&lt;/li&gt;
&lt;/ul&gt;
</xt></td>
</tr>
</table>
<h5 class='topic'>Collections</h5>
<table class='styled w800'>
<tr>
<th>Data type</th>
<th>JSON example</th>
<th>HTML</th>
</tr>
<tr>
<td class='code'>
List&lt;String&gt;
</td>
<td class='code'>
[
<js>'foo'</js>
<jk>null</jk>
]
</td>
<td class='code'><xt>
&lt;ul&gt;
&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
&lt;/ul&gt;
</xt></td>
</tr>
<tr>
<td class='code'>
List&lt;Number&gt;
</td>
<td class='code'>
[
123,
1.23,
<jk>null</jk>
]
</td>
<td class='code'><xt>
&lt;ul&gt;
&lt;li&gt;<xv>123</xv>&lt;/li&gt;
&lt;li&gt;<xv>1.23</xv>&lt;/li&gt;
&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
&lt;/ul&gt;
</xt></td>
</tr>
<tr>
<td class='code'>
List&lt;Object&gt;
</td>
<td class='code'>
[
<js>'foo'</js>,
123,
1.23,
<jk>true</jk>,
<jk>null</jk>
]
</td>
<td class='code'><xt>
&lt;ul&gt;
&lt;li&gt;<xv>foo</xv>&lt;/li&gt;
&lt;li&gt;&lt;number&gt;<xv>123</xv>&lt;/number&gt;&lt;/li&gt;
&lt;li&gt;&lt;number&gt;<xv>1.23</xv>&lt;/number&gt;&lt;/li&gt;
&lt;li&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/li&gt;
&lt;li&gt;&lt;null/&gt;&lt;/li&gt;
&lt;/ul&gt;
</xt></td>
</tr>
</table>
<h5 class='topic'>Beans</h5>
<table class='styled w800'>
<tr>
<th>Data type</th>
<th>JSON example</th>
<th>HTML</th>
</tr>
<tr>
<td class='code'>
<jk>class</jk> MyBean {
<jk>public</jk> String a;
<jk>public</jk> <jk>int</jk> b;
<jk>public</jk> Object c; <jc>// String value</jc>
<jk>public</jk> Object d; <jc>// Integer value</jc>
<jk>public</jk> MyBean2 e;
<jk>public</jk> String[] f;
<jk>public</jk> <jk>int</jk>[] g;
}
<jk>class</jk> MyBean2 {
String h;
}
</td>
<td class='code'>
{
<jok>a</jok>: <jov>'foo'</jov>,
<jok>b</jok>: <jov>123</jov>,
<jok>c</jok>: <jov>'bar'</jov>,
<jok>d</jok>: <jov>456</jov>,
<jok>e</jok>: {
<jok>h</jok>: <jov>'baz'</jov>
}
<jok>f</jok>: [<jov>'qux'</jov>]
<jok>g</jok>: [<jov>789</jov>]
}
</td>
<td class='code'><xt>
&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
&lt;tr&gt;
&lt;td&gt;<xv>a</xv>&lt;/td&gt;
&lt;td&gt;<xv>foo</xv>&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>b</xv>&lt;/td&gt;
&lt;td&gt;<xv>123</xv>&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>c</xv>&lt;/td&gt;
&lt;td&gt;<xv>bar</xv>&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>d</xv>&lt;/td&gt;
&lt;td&gt;&lt;number&gt;<xv>456</xv>&lt;/number&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>e</xv>&lt;/td&gt;
&lt;td&gt;
&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
&lt;tr&gt;
&lt;td&gt;<xv>h</xv>&lt;/td&gt;
&lt;td&gt;<xv>qux</xv>&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>f</xv>&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;<xv>baz</xv>&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>g</xv>&lt;/td&gt;
&lt;td&gt;
&lt;ul&gt;
&lt;li&gt;<xv>789</xv>&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
</xt></td>
</tr>
</table>
<h5 class='topic'>Beans with Map properties</h5>
<table class='styled w800'>
<tr>
<th>Data type</th>
<th>JSON example</th>
<th>HTML</th>
</tr>
<tr>
<td class='code'>
<jk>class</jk> MyBean {
<jk>public</jk> Map&lt;String,String&gt; a;
<jk>public</jk> Map&lt;String,Number&gt; b;
<jk>public</jk> Map&lt;String,Object&gt; c;
}
</td>
<td class='code'>
{
<jok>a</jok>: {
<jok>k1</jok>: <jov>'foo'</jov>
},
<jok>b</jok>: {
<jok>k2</jok>: <jov>123</jov>
},
<jok>c</jok>: {
<jok>k3</jok>: <jov>'bar'</jov>,
<jok>k4</jok>: <jov>456</jov>,
<jok>k5</jok>: <jov>true</jov>,
<jok>k6</jok>: <jov>null</jov>
}
}
</td>
<td class='code'><xt>
&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
&lt;tr&gt;
&lt;td&gt;<xv>a</xv>&lt;/td&gt;
&lt;td&gt;
&lt;table _type='object'&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k1</xv>&lt;/td&gt;
&lt;td&gt;<xv>foo</xv>&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>b</xv>&lt;/td&gt;
&lt;td&gt;
&lt;table _type='object'&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k2</xv>&lt;/td&gt;
&lt;td&gt;<xv>123</xv>&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>c</xv>&lt;/td&gt;
&lt;td&gt;
&lt;table <xa>_type</xa>=<xs>'object'</xs>&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k3</xv>&lt;/td&gt;
&lt;td&gt;<xv>bar</xv>&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k4</xv>&lt;/td&gt;
&lt;td&gt;&lt;number&gt;<xv>456</xv>&lt;/number&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k5</xv>&lt;/td&gt;
&lt;td&gt;&lt;boolean&gt;<xv>true</xv>&lt;/boolean&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;<xv>k6</xv>&lt;/td&gt;
&lt;td&gt;&lt;null/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
</xt></td>
</tr>
</table>