如何将请求标头从主视图传递到Play框架中的部分视图

时间:2015-01-13 10:58:34

标签: scala playframework-2.0

我有一个Play 2视图,它嵌入在主内部div中,如下所示

  1. @ mainboard.applicationtraffic.render()

    上面的视图在顶部有一个定义为@(隐式请求:RequestHeader)的参数 applicationtraffic。因为我想使用websocket我定义了参数

    问题:当我尝试渲染1.它请求RequestHeader作为参数 任何人都可以给我一些示例代码如何将请求标题传递给局部视图
    渲染方法

    提前谢谢

  2.    
    applicationtraffic.scala.html
    
    @(implicit request: RequestHeader)
    
    <script type="text/javascript">
    var socket = new WebSocket("@routes.Application.applicationTrafficWS().webSocketURL()")
    socket.onopen = function(event)
    {
    socket.send('I am the client and I\'m listening!');
    socket.onmessage = function(event)
    {
    var datapoint = jQuery.parseJSON( event.data );
    $("#data" ).html(datapoint);
    };
    socket.onclose = function(event)
    {
    console.log('Client notified socket has closed',event);
    };
    };
    </script>
    <div id="data">
      
    </div>
    
    Index.scala.html
    
        <div class="span4">
             <div class="widget" >
                <div class="widget-head">
                    <h4 class="heading glyphicons cardio"><i></i>Application Traffic</h4>
                      </div>
                         <div class="widget-body">
                           @mainboard.applicationtraffic.render(Context.current.get()._requestHeader())
                      </div>
                </div>
         </div>

1 个答案:

答案 0 :(得分:0)

以下是将request作为隐式参数传递时如何获得所需内容的最小示例。首先,您需要在index.html

中声明隐含参数

<强> index.scala.html

@()(implicit request: play.api.mvc.RequestHeader)
<div class="span4">
  <div class="widget" >
    <div class="widget-head">
      <h4 class="heading glyphicons cardio"><i></i>Application Traffic</h4>
    /div>
    <div class="widget-body">
      @applicationtraffic()
    /div>
  </div>
</div>

请注意空参数列表以及如何调用局部视图(由于您将局部视图命名为applicationtraffic.scala.html,因此我已删除此示例中的主板前缀)。因为您希望将请求作为隐式传递,并且我们没有显式参数,所以您需要再次添加空括号:

<强> applicationtraffic.scala.html

@()(implicit request: RequestHeader)

<script type="text/javascript">...</script>
<div>...</div>

最后,您的控制器方法应将request参数声明为implicit

def index = Action { implicit request =>
  Ok(views.html.index())
}