Как добавить составной вид, такой как HashMap, для вращения в playframework 2.4.x

Я хочу добавить объект HashMap, содержащий много разных объектов, в шаблон twirl, потому что я не люблю добавлять один за другим в качестве параметра к twirl, это нарушает правило с шаблонами проектирования.

нормальный стиль:

views.html.index.render(object1, object2, list3, list4, ...);

@(object1:Object1Model, object2:Object2Model, list3: List[Object3Model], list4: List[Object4Model]) 

Есть ли решение для установки и получения параметров, как это?

Map data = new HashMap();
data.put("object1", object1);
data.put("object2", object2);
data.put("list3", list3);
data.put("list4", list4);
views.html.index.render(data);

Как получить и определить объекты в HashMap в twirl, официальный документ twirl слишком прост...

@(data:Map) 
Object1Model object1 = (Object1Model) data.get("object1");
Object2Model object2 = (Object2Model) data.get("object2");
List list3 = (List) data.get("list3");
List list4 = (List) data.get("list4");

Большое спасибо!

1 ответ

Решение

Для обеспечения безопасности типов вы можете создать выделенный класс с полями требуемых типов, дополнительное преимущество состоит в том, что сложные IDE будут распознавать типы полей и / или имена автозаполнения полей, что поможет вам избежать ошибок в представлениях.

Конечно, как и в каждом классе, вы также можете использовать преимущества конструктора и / или геттера / сеттера.

(псевдокод):

package viewhelpers;

import java.util.ArrayList;
import java.util.List;

public class SomeViewHelper {

    public String header;
    public List<String> labels = new ArrayList<>();
    public List<Integer> values = new ArrayList<>();

}

Заполните это как-нибудь в контроллере:

public static Result incomes() {
    SomeViewHelper data = new SomeViewHelper();
    data.header = "Incomes in first quarter";
    data.labels = Arrays.asList("Jan", "Feb", "Mar");
    data.values = Arrays.asList(121, 122, 123);
    return ok(views.html.incomes.render(data));
}

и использовать в виде, как:

@(data: viewhelpers.SomeViewHelper)

<h1>@data.header</h1>
<table>
    <tr>
        @for(label <- data.labels) {
            <th>@label</th>
        }
    </tr>
    <tr>
        @for(value <- data.values) {
            <td>@value</td>
        }
    </tr>
</table>
Другие вопросы по тегам