从视图执行计算

时间:2014-10-09 10:07:53

标签: grails

如果我想从另一个对象中检索一个值,请从Grails控制器函数中检索它,如下所示:

def person = Person.get(10)
println person.name

上述代码将返回ID10的人物对象,并且还会返回该特定用户的name

同样,我如何在视图中进行这样的计算。

查看

<body>
<table>
<g:each in="${personInstanceList}" status="i" var="personInstance">
                    <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">

                        <td><g:link action="classesoffered"
                                url="${fieldValue(bean: personInstance, field: "id")}"
                                id="${personInstance.id}"  >
                ${personInstance.id}
                            </g:link></td>
                   .....



   ... </body>

上面的代码将显示人物对象的ID。我是否可以使用此ID来检索另一个对象的值。例如。

def school = School.get(${personInstance.id})

我可以使用ID (${personInstance.id})从视图中检索学校吗?

注意:希望我已正确解释了这个问题。简而言之,我想在视图中进行计算。从视图中schoolinstance检索${personInstance.id}

更新

人物模型

String name
int school

学校模式

String nameOfSchool

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容导入视图中的域:( gsp的第一行)

<%@ page import="com.yourPackage.School" %>

然后,您可以使用标记set在您查看的内部创建一个新变量。

例如:

<g:set var="school" value="${ School.get(personInstance.id) }" />

如果您想在GSP中打印该值(例如学校的名称),您可以使用:

${ school.nameOfSchool }

(如果学校当然不是空的)

希望有所帮助

答案 1 :(得分:1)

您应该重新设计域模型以适应任务,而不是尝试在视图中执行此类操作。如果您希望每个PersonSchool相关联,那么您应该使用正确的关联而不是存储ID(顺便提一下,您使用了错误的类型 - 通过默认Grails域类的ID是Long,而不是int):

class Person {
  String name
  School school
}

class School {
  String name
}

并创建这样的实例:

// create a new school
def school = new School(name:'Example school')
// or fetch an existing one from the DB
// def school = School.get(1)

def person = new Person(name:'Illep', school:school)

使用此模型,GSP可以像

一样访问学校名称
${personInstance.school?.name}