Какая польза от @Model (adaptables = Resource.class) в моделях Sling?

Если вы уже создали фигуру, вы можете быстро это сделать:

fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)

Чтобы распространить изменение размера на существующее gui-окно, добавьте forward=True

fig.set_size_inches(18.5, 10.5, forward=True)
0
задан Jens 22 March 2019 в 16:28
поделиться

1 ответ

Эти статьи дают хорошее объяснение:

Первая ссылка отмечает, что

«Есть варианты использования где вам может понадобиться получить объект Request внутри Sling Model или вы хотите адаптировать вашу Sling Model с помощью объекта SlingHttpServletRequest (где вы не хотите создавать объект ресурса). "

Во второй ссылке упоминается

«Многие проекты Sling хотят иметь возможность создавать объекты модели - POJO, которые автоматически сопоставляются с объектами Sling, обычно ресурсами, но также запрашивают объекты. Иногда этим POJO нужны службы OSGi, как хорошо. "

То есть, используете ли вы один адаптируемый или другой (или оба сразу), зависит от того, что вам нужно в вашей модели. В этом примере он создает модель, которая должна считывать некоторые значения из ресурса, а другие - из запроса, поэтому адаптируемость, которую вы будете использовать, зависит от того, какие значения вам нужны в вашей модели. Вот пример класса в этой первой ссылке, который показывает «сообщение», которому нужны данные из ресурса (имя и фамилия) и данные из запроса (путь):

package com.aem.core.models;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.Via;
import org.apache.sling.models.annotations.injectorspecific.SlingObject;
import org.apache.sling.models.annotations.DefaultInjectionStrategy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Model(adaptables = {SlingHttpServletRequest.class, Resource.class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class AdaptationModel { 

    Logger logger = LoggerFactory.getLogger(this.getClass());

    private String message;

    @SlingObject
    private SlingHttpServletRequest request;

    @Inject @Via("resource")
    private String firstName;

    @Inject  @Via("resource")
    private String lastName;

    @PostConstruct
    protected void init() {

        message = "Hello World\n";

        if (request != null) {
            this.message += "Request Path: "+request.getRequestPathInfo().getResourcePath()+"\n";
        }

        message += "First Name: "+ firstName +" \n";
        message += "Last Name: "+ lastName + "\n";

        logger.info("inside post construct");
    }

    public String getMessage() {
        return message;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}
0
ответ дан Shawn 22 March 2019 в 16:28
поделиться