Play Framework 2.0 - 渲染视图中的问题 [英] Play Framework 2.0 - issue in rendering view

查看:73
本文介绍了Play Framework 2.0 - 渲染视图中的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我跟着这个链接 https://github.com/julienrf/play-jsmessages/提交/ 3f67083e296edc039af6ed7fc0fe698a282d01b5 在JavaScript中实现i18N。

  Application.java 
====== =============
包控制器;

import java.util.HashMap;
import java.util.Map;
导入play.i18n.Messages;
import play.i18n.Lang;
导入播放。*;
import play.mvc。*;
导入jsmessages.JsMessages;

导入views.html。*;

导入models.Session;

public class Application extends Controller {

private static Session session;
final static JsMessages messages = new JsMessages(play.Play.application());
$ b $ **
*加载应用程序
* @return
* /
public static Result index(){
return load( );
}
public static Result jsMessages(){
System.out.println(in jsMessages);
return ok(messages.generate(window.Messages))。as(application / javascript);

$ b / **
*初始加载函数,清除所有存储的会话数据
* @return重定向到homepage.html
* /
public static Result load(){
System.out.println(in load1);
session = new Session();
changeLang(fr);
jsMessages();
return ok(mainpage.render(messages));


$ b public static Result(){
session = new Session();
return ok();

$ b $ public static Session getSession(){
if(session == null){
session = new Session();
}
返回会话;
}
}

如果我不包含i18n代码的JavaScript
mainpage.scala.html
==== ======================
@(messages:jsmessages.JsMessages)
< html>
< head>
@ messages.html(window.Messages)
< / head>

//一些代码放在这里

< / html>


渲染时加载的网页homepage.scala.html
Main.js
======
//一些代码放在这里
alert(Messages('first'));
//一些代码在这里


如果我在Application.java,mainpage.scala.html和main.js中不包括i18n代码,我的应用程序工作正常,但包含i18n代码后,页面不会被加载。

根据我的理解,问题在于渲染,因为两个结果从load()和jsMessages()。请告诉我如何呈现javascript和html或其他任何方式,以便解决此问题。 解决方案

您必须在文件(路径)中加载'jsMessages'或将它们显示在模板中进行选择。



第一种情况下,您可以使用:

  //控制器:
public static Result jsMessages(){
System.out.println(in jsMessages);
return ok(messages.generate(window.Messages))。as(application / javascript);
}

//路由文件:
GET /messages.js controllers.Application.jsMessages()

//模板:
< script type =text / javascriptsrc =@ routes.Application.jsMessages()>< / script>

第二种方案,然后删除 public static Result jsMessages() $ b

  //控制器
public static Result load(){
System.out .println(in load1);
session = new Session();
changeLang(fr);
return ok(mainpage.render(messages.generate(window.Messages)));
}

//模板:
@(messages:String)
< script type =text / javascript> @ messages< / script>


I followed this link https://github.com/julienrf/play-jsmessages/commit/3f67083e296edc039af6ed7fc0fe698a282d01b5 to implement i18N in javascript.

Application.java
===================
package controllers;

import java.util.HashMap;
import java.util.Map;
import play.i18n.Messages;
import play.i18n.Lang;
import play.*;
import play.mvc.*;
import jsmessages.JsMessages;

import views.html.*;

import models.Session;

public class Application extends Controller {

    private static Session session;
    final static JsMessages messages = new JsMessages(play.Play.application());

    /**
     * Loads the application
     * @return
     */
    public static Result index() {
        return load();
    }
    public static Result jsMessages() {
        System.out.println("in jsMessages");
        return ok(messages.generate("window.Messages")).as("application/javascript");
    }

    /**
     * Initial load function, clears all stored session data
     * @return Redirect to homepage.html
     */
    public static Result load() {
        System.out.println("in load1");
        session = new Session();
        changeLang("fr");
        jsMessages();
        return ok(mainpage.render(messages));
    }


    public static Result reset() {
        session = new Session();
        return ok();
    }

    public static Session getSession() {
        if(session == null) {
            session = new Session();
        }
        return session;
    }
}

HTML which is rendered properly if i don't include i18n code for javascripts
mainpage.scala.html
==========================
@(messages: jsmessages.JsMessages)
<html>
<head>
@messages.html("window.Messages")
</head>

//some code goes here

</html>


javascript loaded on rendering homepage.scala.html
Main.js
======
// some code goes here
alert(Messages('first'));
//some code goes here


If I am not including i18n code in Application.java , mainpage.scala.html and main.js , my application is working fine but after including i18n code , page is not getting loaded.

As per my understanding , problem is with rendering ,as two results are being returned from load() and jsMessages().Kindly suggest me how to render both javascript and html or any other way so that this issue can be resolved.

解决方案

You have to choose between loading 'jsMessages' in a file (route) or display them in a template.

First scenario, then you use:

// Controller:
public static Result jsMessages() {
    System.out.println("in jsMessages");
    return ok(messages.generate("window.Messages")).as("application/javascript");
}

// Route file:
GET     /messages.js                controllers.Application.jsMessages()

// Template:
<script type="text/javascript" src="@routes.Application.jsMessages()"></script>

Second scenario, then remove public static Result jsMessages() and:

// Controller
public static Result load() {
    System.out.println("in load1");
    session = new Session();
    changeLang("fr");
    return ok(mainpage.render(messages.generate("window.Messages")));
}

// Template:
@(messages: String)
<script type="text/javascript">@messages</script>

这篇关于Play Framework 2.0 - 渲染视图中的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆