Thanks for this, Timothy.

As you've realized, the framework currently doesn't have any way of
handling Maps.

A similar question was raised recently on this mailing list, and I sketched
out a solution as to how it might be supported [1]

Meanwhile, glad you have a solution that works.  As Stephen says,
XmlRootElement's are just view models, so you could use @ViewModel if it
helped explain the intent better.

Thx
Dan


[1]
https://lists.apache.org/thread.html/e5d5481d5371d7350b0d614fb72780bbf4b87c0d4ef321e3b773fdeb@%3Cusers.isis.apache.org%3E


On 23 September 2016 at 13:55, Simecsek Timothy <
[email protected]> wrote:

> Hi,
>
> I was able to find a solution that I want to share:
>
> In the domain object I added this method:
>     @MemberOrder(sequence = "2.0")
>     @PropertyLayout(hidden = Where.ALL_TABLES)
>     @CollectionLayout(named = "request headers", render =
> RenderType.EAGERLY)
>     @XmlElementWrapper
>     @NotPersistent
>     public ArrayList<StringMapElementVo> getStringListElement() {
>         final ArrayList<StringMapElementVo> stringMapVo =
> Lists.newArrayList();
>         for (String key : this.getRequestHeaders().keySet()) {
>             final StringMapElementVo stringMapElement = new
> StringMapElementVo();
>             stringMapElement.setKey(key);
>             stringMapElement.setValue(this.getRequestHeaders().get(key));
>             stringMapVo.add(stringMapElement);
>         }
>         return  stringMapVo;
>     }
>
> And set the persisted field to not show:
>     private Map<String, String> requestHeaders = Maps.newHashMap();
>
>     @PropertyLayout(hidden = Where.EVERYWHERE)
>     @Persistent(defaultFetchGroup = "true")
>     public Map<String, String> getRequestHeaders() {
>         return requestHeaders;
>     }
>
> And here the JAXB annotated DTO see [1] :
> @XmlRootElement(name = "KeyValueElement")
> @DomainObject(editing = Editing.DISABLED)
> public class StringMapElementVo {
>
>     public StringMapElementVo() {
>     }
>
>     //region > key (property)
>     private String key;
>
>     public String getKey() {
>         return key;
>     }
>
>     public void setKey(final String key) {
>         this.key = key;
>     }
>     //endregion
>
>     //region > value (property)
>     private String value;
>
>     public String getValue() {
>         return value;
>     }
>
>     public void setValue(final String value) {
>         this.value = value;
>     }
>     //endregion
> }
>
> I used a very similar approach for a List<String> property also. This way
> it displays in the UI like any other collection of persistent Domain
> Objects. If you need this to act as an object you can add another DTO
> around it.
>
> Regards Timothy
>
> [1] https://isis.apache.org/guides/ugbtb.html#2.3.-jaxb-annotated-dtos
>
> -----Ursprüngliche Nachricht-----
> Von: Simecsek Timothy
> Gesendet: Donnerstag, 22. September 2016 10:58
> An: [email protected]
> Betreff: Display HashMap in UI
>
> Hi,
>
> I'm using a Map<String, String> in one of our DomainObjects which is
> stored in one column of this class.
> This is the definition:
> //region > requestHeaders (collection)
> private Map<String, String> requestHeaders = Maps.newHashMap();
>
> @MemberOrder(sequence = "2.0")
> @CollectionLayout(named = "request headers", render = RenderType.EAGERLY)
> @Persistent(defaultFetchGroup = "true") public Map<String, String>
> getRequestHeaders() {
>     return requestHeaders;
> }
>
> private void setRequestHeaders(final Map<String, String> requestHeaders) {
>     this.requestHeaders = requestHeaders; } //endregion
>
> Now I want to display the content of the Map in the UI. Currently it shows
> me:
> ...
> Request Headers               Untitled Hash Map
> ...
>
> Where "Untitled Hash Map" is a clickable object but when I click on it I'm
> forwarded to the start page.
>
> Is there any possibility to get this working with HashMap?
>
> Thanks Timothy
>
>
> ______________________________________________________________________
> Disclaimer: This email and any attachments are sent in strictest
> confidence for the sole use of the addressee and may contain legally
> privileged, confidential, and proprietary data. If you are not the intended
> recipient, please advise the sender by replying promptly to this email and
> then delete and destroy this email and any attachments without any further
> use, copying or forwarding.
>
> ______________________________________________________________________
> Disclaimer: This email and any attachments are sent in strictest confidence
> for the sole use of the addressee and may contain legally privileged,
> confidential, and proprietary data. If you are not the intended recipient,
> please advise the sender by replying promptly to this email and then delete
> and destroy this email and any attachments without any further use, copying
> or forwarding.
>

Reply via email to