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>