如何修改传递到Grails GSP的属性值
我需要能够更改bean的值(属性) 通过普惠制。我正在使用Grails2.3.11 请参阅下面的代码-这不会修改bean-请您告知如何执行此操作 在第#1行,这是尝试用新值替换属性- 因此,地点->Xenue。 在第2行,这表明该值没有改变如何修改传递到Grails GSP的属性值,grails,grails-2.0,Grails,Grails 2.0,我需要能够更改bean的值(属性) 通过普惠制。我正在使用Grails2.3.11 请参阅下面的代码-这不会修改bean-请您告知如何执行此操作 在第#1行,这是尝试用新值替换属性- 因此,地点->Xenue。 在第2行,这表明该值没有改变 // locns.gsp <!DOCTYPE html> <html > <head> ... <script type="text/javascript">
// locns.gsp
<!DOCTYPE html>
<html >
<head>
...
<script type="text/javascript">
<g:each in="${locns}" status="i" var="locn">
var x = '${locn.addr1}'.replace("V", "X");
locn.addr1 = x; #1
</g:each>
</script>
</head>
<body>
<g:each in="${locns}" status="i" var="locn">
${locn.addr1} #2
</g:each>
</body>
</html>
// Controller:
def locns() {
Locn[] locns = new Locns[2];
locns[0] = new Locn();
...
locns[0].addr1 = "Venue Point";
locns[0].addr2 = 'London';
...
[locns:locns]
}
// attribute / bean class
class Locn {
public String addr1;
public String addr2;
...
}
//locns.gsp
...
变量x='${locn.addr1}'。替换(“V”,“x”);
locn.addr1=x#1.
${locn.addr1}#2
//控制器:
def locns(){
Locn[]locns=新Locn[2];
Locn[0]=新Locn();
...
locns[0]。addr1=“场馆点”;
locns[0]。addr2='伦敦';
...
[失事地点:失事地点]
}
//属性/bean类
等级Locn{
公共字符串addr1;
公共字符串addr2;
...
}
谢谢你,史蒂夫。你把客户端和服务器端的逻辑搞混了。首先,GSP标记在服务器端执行,以生成发送到浏览器的HTML,然后生成的JavaScript才会在客户端浏览器中执行。GSP将生成一些类似于
<!DOCTYPE html>
<html >
<head>
...
<script type="text/javascript">
var x = 'Venue Point'.replace("V", "X");
locn.addr1 = x; #1
var x = 'Venue 2'.replace("V", "X");
locn.addr1 = x; #1
</script>
</head>
<body>
Venue Point #2
Venue 2 #2
</body>
</html>
...
变量x='地点点'。替换为(“V”,“x”);
locn.addr1=x#1.
var x=‘地点2’。替换为(“V”、“x”);
locn.addr1=x#1.
地点#2
地点2#2
然后JavaScript将失败,第一行出现异常#1,因为您试图在未定义的值上设置属性。您应该能够执行类似的操作(即使它是双线程的,并且您的控制器应该处理此操作)
at#1
在#2
${locn.addr1}
那里不需要javascript。但再一次,你不应该在普惠制中考虑这一点
at #1
<g:each in="${locns}" status="i" var="locn">
<% def locnChanged = new ArrayList<>() %>
<% def x = locn %>
<% x.locn = locn.addr.replace("V", "X") %>
<% locnChanged.add(x) %>
</g:each>
at #2
<g:each in="${locnChanged}" status="i" var="locn">
${locn.addr1}
</g:each>