Grails UI(插件)对话框未触发控制器操作

Grails UI(插件)对话框未触发控制器操作,grails,grails-plugin,Grails,Grails Plugin,祝大家新年快乐 我正在进行一个项目,在该项目中,我必须在对话框(模式窗口)窗口中显示“列表”中每条记录的详细信息,同时用户单击列表中每条记录的链接。我正试图使用GrailUI插件来实现这一点。这是我的密码: <gui:dialog width="300px" controller="tag" action="showTags" params=" [id:userInstance.userId]"

祝大家新年快乐

我正在进行一个项目,在该项目中,我必须在对话框(模式窗口)窗口中显示“列表”中每条记录的详细信息,同时用户单击列表中每条记录的链接。我正试图使用GrailUI插件来实现这一点。这是我的密码:

<gui:dialog width="300px" 
           controller="tag" 
           action="showTags" 
           params=" [id:userInstance.userId]" 
           update="dialogData" 
           draggable="true" 
           triggers="[show:[type:'link', text:'Show Tags', on:'click']]" 
           modal="true">
   <div id='dialogData'>This will be updated by the controller action....</div> 

如果您想将某些内容提交到远程,则需要设置
form=“true”
。然后,可以将任何表单元素放置在对话框标记内,而无需定义表单。当form=“true”时,对话框将创建自己的表单

以下是我测试过的一个示例:

test.gsp:

    <html>
        <head>
            ....
            <r:require modules="grailsui-dialog"/>    
        </head>
        <body class="yui-skin-sam">            
            <gui:dialog width="300px" 
               controller="test" 
               action="showTags" 
               params=" [id:userInstance.userId]" 
               form="true"                        <!-- the key to remote submit -->
               update="dialogData" 
               draggable="true" 
               triggers="[show:[type:'link', text:'Show Tags', on:'click']]" 
               modal="true" >    
               <!-- You can put any input element here, which will be submitted in the form-->
               <div id='dialogData'>This will be updated by the controller action....</div>   
           </gui:dialog>
       </body>
   </html>
class TestController {

    def test() { 
        .........
    }

    def showTags() {
        def user = User.findByUserId(params.id)
        def tagInstanceList = user.tags
        render(template: "ajaxResponse", model: [tagInstanceList: tagInstanceList, user:user])          //render a template, not a view
    }
对于Ajax请求,不能呈现视图,视图将替换原始页面。相反,您应该发回一个带有要在对话框中显示的标记的模板:

\u ajaxResponse.gsp

<h3>Tag List of user ${user.username}</h3>
<g:each in="${tagInstanceList}" var="tag">
    <p>${tag}</p>
</g:each>
用户${user.username}的标记列表
${tag}


Wu Jinzhao,非常感谢你帮助我。我想,我的问题用词不对。我试图完成的是,当用户单击每条记录中的链接(类似于“显示详细信息”)时,我希望在弹出窗口的列表中显示每条记录的详细信息。在我的例子中,列表中的每条记录都有标签名、用户名、全名、发布日期等。我想在用户单击每条记录(列表中)中的链接时在弹出窗口中显示此详细信息。谢谢。只需相应地更改控制器和gsp视图中的代码,就可以做任何事情。我认为这里的问题是首先让对话框工作。我尝试了这个代码,它对我来说很有效。但是,当我提交表单时,它会显示视图(showTags)渲染输出。就我而言,我没有任何表格。我只想在用户单击每条记录中的链接时,在对话框中显示每条记录的详细信息。非常感谢。那么您不需要“控制器”和“动作”参数,只需将静态数据放入其中即可。谢谢,吴金钊。我用静态数据测试了它,它是有效的。我还想在该对话框中显示一些相关信息(不是列表中记录的一部分)。该相关信息将来自控制器操作。当用户单击记录(列表中)中的链接时,我想在对话框中显示此相关信息。
<h3>Tag List of user ${user.username}</h3>
<g:each in="${tagInstanceList}" var="tag">
    <p>${tag}</p>
</g:each>