You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2020/03/10 22:38:09 UTC
[juneau] branch master updated: JUNEAU-196
This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 418486d JUNEAU-196
418486d is described below
commit 418486dbb0690bef442cc205a0fec6675a5151d7
Author: JamesBognar <ja...@apache.org>
AuthorDate: Tue Mar 10 18:37:49 2020 -0400
JUNEAU-196
@Html(noTableHeaders) should work on Collections of beans.
---
.../test/java/org/apache/juneau/html/HtmlTest.java | 49 ++++++++++++++++++++++
.../apache/juneau/html/HtmlSerializerSession.java | 22 +++++++---
juneau-doc/docs/ReleaseNotes/8.1.4.html | 2 +
3 files changed, 67 insertions(+), 6 deletions(-)
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/HtmlTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/HtmlTest.java
index 127c552..c549564 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/HtmlTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/HtmlTest.java
@@ -353,4 +353,53 @@ public class HtmlTest {
@HtmlConfig(applyHtml=@Html(on="org.apache.juneau.html.HtmlTest$MyMap2", noTables=true, noTableHeaders=true))
public static class MyMap2 extends LinkedHashMap<String,String> {}
+
+ //-----------------------------------------------------------------------------------------------------------------
+ // Test @Html.noTableHeaders on beans
+ //-----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void testNoTableHeadersOnBeans() throws Exception {
+ HtmlSerializer s = HtmlSerializer.DEFAULT_SQ;
+ Object o = null;
+ String r;
+
+ MyBean b = new MyBean();
+ o = new ObjectList().append(b,b);
+ r = s.serialize(o);
+ assertEquals("<table _type='array'><tr><td>1</td><td>2</td><td>3</td></tr><tr><td>1</td><td>2</td><td>3</td></tr></table>", r);
+ }
+
+ @Html(noTableHeaders=true)
+ public static class MyBean {
+ public int a=1,b=2,c=3;
+ }
+
+ @Test
+ public void testNoTableHeadersOnBeans_usingConfig() throws Exception {
+ HtmlSerializer s = HtmlSerializer.DEFAULT_SQ.builder().applyAnnotations(MyBean2.class).build();
+ Object o = null;
+ String r;
+
+ MyBean b = new MyBean();
+ o = new ObjectList().append(b,b);
+ r = s.serialize(o);
+ assertEquals("<table _type='array'><tr><td>1</td><td>2</td><td>3</td></tr><tr><td>1</td><td>2</td><td>3</td></tr></table>", r);
+ }
+
+ @HtmlConfig(applyHtml=@Html(on="MyBean2", noTableHeaders=true))
+ public static class MyBean2 {
+ public int a=1,b=2,c=3;
+ }
+
+ @Test
+ public void testNoTableHeadersOnBeans_usingConcreteAnnotation() throws Exception {
+ HtmlSerializer s = HtmlSerializer.DEFAULT_SQ.builder().annotations(new HtmlAnnotation("MyBean2").noTables(true)).build();
+ Object o = null;
+ String r;
+
+ MyBean b = new MyBean();
+ o = new ObjectList().append(b,b);
+ r = s.serialize(o);
+ assertEquals("<table _type='array'><tr><td>1</td><td>2</td><td>3</td></tr><tr><td>1</td><td>2</td><td>3</td></tr></table>", r);
+ }
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 4f7d49a..be185ca 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -553,13 +553,17 @@ public class HtmlSerializerSession extends XmlSerializerSession {
if (th != null) {
out.oTag(i, "table").attr(btpn, type2).append('>').nl(i+1);
- out.sTag(i+1, "tr").nl(i+2);
- for (Object key : th) {
- out.sTag(i+2, "th");
- out.text(convertToType(key, String.class));
- out.eTag("th").nl(i+2);
+ if (th.length > 0) {
+ out.sTag(i+1, "tr").nl(i+2);
+ for (Object key : th) {
+ out.sTag(i+2, "th");
+ out.text(convertToType(key, String.class));
+ out.eTag("th").nl(i+2);
+ }
+ out.ie(i+1).eTag("tr").nl(i+1);
+ } else {
+ th = null;
}
- out.ie(i+1).eTag("tr").nl(i+1);
for (Object o : c) {
ClassMeta<?> cm = getClassMetaForObject(o);
@@ -586,6 +590,9 @@ public class HtmlSerializerSession extends XmlSerializerSession {
} else if (cm.isMap() && ! (cm.isBeanMap())) {
Map m2 = sort((Map)o);
+ if (th == null)
+ th = m2.keySet().toArray(new Object[m2.size()]);
+
for (Object k : th) {
out.sTag(i+2, "td");
ContentResult cr = serializeAnything(out, m2.get(k), eType.getElementType(), toString(k), null, 2, false, true);
@@ -600,6 +607,9 @@ public class HtmlSerializerSession extends XmlSerializerSession {
else
m2 = toBeanMap(o);
+ if (th == null)
+ th = m2.keySet().toArray(new Object[m2.size()]);
+
for (Object k : th) {
BeanMapEntry p = m2.getProperty(toString(k));
BeanPropertyMeta pMeta = p.getMeta();
diff --git a/juneau-doc/docs/ReleaseNotes/8.1.4.html b/juneau-doc/docs/ReleaseNotes/8.1.4.html
index 279eaaf..243c61d 100644
--- a/juneau-doc/docs/ReleaseNotes/8.1.4.html
+++ b/juneau-doc/docs/ReleaseNotes/8.1.4.html
@@ -121,6 +121,8 @@
<li class='jc'>{@link oaj.transforms.StackTraceElementSwap}
</ul>
<li>
+ {@link oaj.html.annotation.Html#noTableHeaders} now can be applied to collections of beans.
+ <li>
HTML-Schema support is being deprecated due to low-use and difficulty in maintaining. It will be removed in 9.0.
</ul>