playframework 1.2.4 在 jquery 中调用操作并在视图上呈现

Posted

技术标签:

【中文标题】playframework 1.2.4 在 jquery 中调用操作并在视图上呈现【英文标题】:playframework 1.2.4 invoke action in jquery with render on a view 【发布时间】:2013-05-17 09:50:05 【问题描述】:

我正在尝试在两个控制器 Entity 和 EntityGlobal 之间建立一个 html 视图。

实体控制器方法显示:

public static void show(String id) 
    Object entity = entityService(id);
    renderTemplate("@detailEntity", entity);

EntityGlobal 控制器方法显示:

public static void show(String id) 
    Object entity = globalEntityService(id);
    renderTemplate("@detailEntity", entity);

实际情况:

查看实体控制器的list.html:

...
<table>
#list entities, as:'entity'
    <tr>
    <td><a href="@Entity.show(entity.id)">entity.name</a></td>
    ...
    </tr>
#/list
</table>
...

查看EntityGlobal控制器的list.html:

...
<table>
#list entities, as:'entity'
    <tr>
    <td><a href="@EntityGlobal.show(entity.id)">entity.name</a></td>
    ...
    </tr>
#/list
</table>
...

所有代码都是重复的,除了这一行:

<a href="@EntityGlobal.show(entity.id)">

我正在尝试类似的东西:

通用模板视图 listTemplate.html :

...
<table>
#list entities, as:'entity'
    <tr>
    <td><a href="javascript:show('$entity.id');">entity.name</a></td>
    ...
    </tr>
#/list
</table>
...

查看实体控制器的list.html:

#include 'listTemplate.html' /
<script>
    var showEntity = #jsAction @Entity.show(':entityId') /;
    function show(entityId) 
        $.get(showEntity(entityId: entityId), function() console.log("entity SUCCESS"););
    
</script>

查看EntityGlobal控制器的list.html:

#include 'listTemplate.html' /
<script>
    var showEntity = #jsAction @EntityGlobal.show(':entityId') /;
    function show(entityId) 
        $.get(showEntity(entityId: entityId), function() console.log("entity global SUCCESS"););
    
</script>

它不起作用。当我点击一个链接时,方法@EntityGlobal.show(':entityId') 被调用,console.log 的消息被打印,但视图'detailEntity' 上的渲染没有进行。

是否可以在 jquery 中调用动作播放并加载模板? 如果有人知道这样做的方法,那将非常有帮助。

谢谢。

【问题讨论】:

【参考方案1】:

我发现使用 playframework 标签的解决方法:

标签 tag_list.html :

<table>
#list _entities, as:'entity'
    % _entityShow = _entityShow.toString().replace(":entityId", entity.id); %
    <tr>
    <td><a href="$_entityShow">entity.name</a></td>
    ...
    </tr>
#/list
</table>

查看实体控制器的list.html:

#tag_list entityShow:@Entity.show(':entityId'), entities: entities /

查看EntityGlobal控制器的list.html:

#tag_list entityShow:@EntityGlobal.show(':entityId'), entities: entities /

【讨论】:

【参考方案2】:
<script>
    var showEntityUrl = '@@EntityGlobal.show(entity.id)';
    window.location = showEntityUrl;
</script>

【讨论】:

以上是关于playframework 1.2.4 在 jquery 中调用操作并在视图上呈现的主要内容,如果未能解决你的问题,请参考以下文章

playframework 1.2.4 在 jquery 中调用操作并在视图上呈现

Playframework 1.2.4 进化不起作用

如何将变量从 PlayFramework 1.2.4 传递到 Javascript

playframework 1.2.4 如何将 jar 与已经存在的 JPA 实体一起使用

Play Framework 1.2.4 将项目导出/导入到 Eclipse IDE

Play Framework 1.2.4:#select 模板的选定选项