什么控制器用于'仪表板'触摸多个域的样式UI

时间:2016-09-18 17:35:30

标签: spring-mvc grails grails-controller

我模糊地说我应该在某种模拟应用中使用,其中向用户呈现一个网页,该网页显示来自多个域的数据并提供触摸多个域的各种交互。

在这种情况下,它是一个房地产模拟,其中UI演示显示有关房屋的用户数据,买卖的提议,用户谈判的状态等,有关"世界状况的信息"以及那种东西。页面中还有相当数量的ajax。

我可以只拥有一个与特定域无关的控制器,然后只提供所有不同的对象吗?也许使用命令对象来处理从用户返回的操作?

希望这个问题对于一个连贯的答案来说不是太模糊,我只是在寻找关于高级方法的建议。

2 个答案:

答案 0 :(得分:4)

是的,您可以拥有一个与特定域不直接相关的控制器。例如,您可以创建DashboardController。命令对象的使用取决于您和您的需要,但您可以像使用任何其他控制器一样在上述控制器中使用Domain实例。

答案 1 :(得分:1)

正如@Joshua Moore所说,这没问题,让我给一个小缩短的例子。 (希望它能给你一些想法...)

我在应用程序中使用bootstrap-theme,仪表板上的信息(几个统计小部件)是通过对仪表板控制器进行ajax调用生成的。

首先,UrlMappings.groovy文件:

类UrlMappings {

static mappings = {
    "/$controller/$action?/$id?(.$format)?"{
        constraints {
            // apply constraints here
        }
    }

    "/"(controller: "dashboard", action:"index")
    "500"(view:'/error')
}

}

然后是控制器代码:

package example

import java.util.Random
import grails.converters.JSON
import groovy.time.TimeCategory

class DashboardController {

    def index() {}

    def contractAmountAsJson() { ...someCode; return Data as JSON... }

}

然后是index.gsp页面:

<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main">
<g:set var="entityName" value="${message(code: 'syParameter.label', default: 'SyParameter')}" />
<title><g:message code="default.list.label" args="[entityName]" /></title>
</head>
<body>
<!-- NEW WIDGET START -->
<article class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
    <!-- Widget ID (each widget will need unique ID)-->
    <div class="jarviswidget" id="wid-id-8" data-widget-editbutton="false">
        <header>
            <span class="widget-icon"> <i class="fa fa-bar-chart-o"></i> </span>
            <h2>Vertragsvolumen aktiver Kunden-Verträge pro Monat</h2>
        </header>

        <!-- widget div-->
        <div>
            <!-- widget edit box -->
            <div class="jarviswidget-editbox">
                <!-- This area used as dropdown edit box -->
            </div>
            <!-- end widget edit box -->

            <!-- widget content -->
            <div class="widget-body no-padding">
                <div id="customerContractAmount" class="chart no-padding"></div>
            </div>
            <!-- end widget content -->
        </div>
        <!-- end widget div -->
    </div>
    <!-- end widget -->
</article>
</body>
</html>

以javascript为例:

if ($('#customerContractAmount').length) {
    $.ajax({
        url: '${request.contextPath}/dashboard/contractAmountAsJson?type=customer',
        dataType: 'json',
        success: function(chartData) {
            Morris.${session?.user?.statisticStyle ? session.user.statisticStyle : "Area"}({
                element : 'customerContractAmount',
                data : chartData,
                xkey : 'period',
                ykeys : ['a', 'b', 'c'],
                labels : ['bestätigt', 'erstellt', 'in Arbeit']
            });
        }
    });
}