2013-05-02 2 views
0

У меня есть следующий код, в котором я хочу, чтобы создать div с динамическим фоном:Настройка URL фонового изображения в SafeHtmlTemplates

public interface Template extends SafeHtmlTemplates { 
    @Template("<div class='imageDiv' style=\"background-image: url({0});\"/>") 
    SafeHtml content(String picture); 
} 

public void render(SafeHtmlBuilder safeHtmlBuilder, final T model) { 
    SafeHtml html = TEMPLATE.content(picture); 
    safeHtmlBuilder.append(html); 
} 

После запуска приложения, первый я имел это предупреждение:

Template with variable in CSS attribute context: 
The template code generator cannot guarantee HTML-safety of the template 

Тогда ошибка:

java.lang.NullPointerException: null 
at com.google.gwt.safehtml.shared.SafeHtmlUtils.htmlEscape(SafeHtmlUtils.java:156) 
at xx.xx.xx.xx.xx.ImageItemCell_TemplateImpl.content(ImageItemCell_TemplateImpl.java:14) 
at xx.xx.xx.xx.xx.ImageItemCell.render(ImageItemCell.java:53) 

При попытке установки изображения в качестве SafeUri:

SafeUri uri = UriUtils.fromTrustedString(picture); 
SafeHtml html = TEMPLATE.content(uri); 

Я получаю различные ошибки:

[ERROR] - SafeUri can only be used as the entire value of a URL attribute. 
      Did you mean to use java.lang.String or SafeHtml instead? 

Что я должен делать в этом случае?

Спасибо.

ответ

1

Вы должны использовать SafeStyles:

public interface Template extends SafeHtmlTemplates { 
    @Template("<div class='imageDiv' style='{0}'></div>") 
    SafeHtml content(SafeStyles picture); 
} 

public void render(SafeHtmlBuilder safeHtmlBuilder, final T model) { 
    SafeHtml html = TEMPLATE.content(SafeStyleUtils.forBackgroundImage(picture)); 
    safeHtmlBuilder.append(html); 
} 

(при условии picture является SafeUri здесь)

+0

спасибо за ваш ответ, как насчет того, если есть другие элементы в стиле, как ширина и высота? что такое синтаксис? –

+0

Затем вы использовали 'SafeStylesBuilder' –

Смежные вопросы