如何修改传递到Grails GSP的属性值

如何修改传递到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">

我需要能够更改bean的值(属性) 通过普惠制。我正在使用Grails2.3.11

请参阅下面的代码-这不会修改bean-请您告知如何执行此操作

在第#1行,这是尝试用新值替换属性- 因此,地点->Xenue。 在第2行,这表明该值没有改变

// 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>