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 <[email protected]>
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>
 

Reply via email to