Expand my Community achievements bar.

SOLVED

Java: how to check if a page (defined as cq:Page) has a custom property?

Avatar

Level 9

To achieve my question above, I used querybuilder that retrieves custom pages and then I map these maps to a model file.

My problem is that in some instances, there are pages without this custom property (as an example, let's call it aNew which can be either true or false and of boolean property).

My issue is that when I "cast" the search result hits to my model, aNew automatically get "false" for pages that doesn't have this property.

Any ideas how it can be done?

Map<String, String> map = new HashMap<>();

map.put("path", "/content/data/fishes");

map.put("type", "cq:Page");

map.put("p.limit", "1");

QueryBuilder builder = getResourceResolver().adaptTo(QueryBuilder.class);

Query query = builder.createQuery(PredicateGroup.create(map), getResourceResolver().adaptTo(Session.class));

SearchResult searchResult = query.getResult();

if (searchResult.getTotalMatches() > 0) {

    List<Hit> hits = searchResult.getHits();

  

    Resource resource = hits.get(0).getResource();

    Course tempCourse = resource.adaptTo(Course.class);

}

Screen Shot 2018-01-25 at 4.04.19 pm.png

1 Accepted Solution

Avatar

Correct answer by
Level 10

Convert to node and then invoke the method hasProperty - Node (Content Repository for Java Technology API Version 2.0)

This will tell you if the page has the custom property.

View solution in original post

3 Replies

Avatar

Level 10

Query builder never modifies the JCR content

What do you mean by "Cast"?

false property would exists before executing the query.

Avatar

Employee

You can add a default value to the property in the Course sling model which will be returned if the property is not present.

@ValueMapValue

@Default(booleanValues = true)

boolean aNew;

Avatar

Correct answer by
Level 10

Convert to node and then invoke the method hasProperty - Node (Content Repository for Java Technology API Version 2.0)

This will tell you if the page has the custom property.