【问题标题】:g:sortableColumn missing controller name(How can I pass controller name to g:sortableColumn?)g:sortableColumn 缺少控制器名称(如何将控制器名称传递给 g:sortableColumn?)
【发布时间】:2017-01-13 11:00:27
【问题描述】:

我正在为我的表使用 g:sortableColumn 但我收到此错误:

由 UrlMappingException 引起:无法创建用于映射的 URL [/()/()?/(*)?] 和参数 [{sort=firstName, order=asc, 行动=列表}]。参数 [controller] 是必需的,但不是 指定!

这是我的代码:

    <g:sortableColumn property="firstName" title="FirstName"/>

这是我的课:

 package medicalautomation

class InformationDocs {

    String firstName
    String lastName
    String idNum
    String sex
    String bloodType
    Date birthDay
    String job
    String backGround
    Double weight
    Double height
    Double bloodPressure
    Double bloogSugar
    String phoneNum
    String address
    String description


    static constraints = {
        firstName()
        lastName()
        idNum()
        sex()
        bloodType()
        birthDay()
        job()
        backGround(maxSize:5000 )
        weight(nullable: true)
        height(nullable: true)
        bloodPressure(nullable: true)
        bloogSugar(nullable: true)
        phoneNum(maxSize: 20)
        address(maxSize: 200)
        description(maxSize: 5000)


    }
}

很明显,当我在另一个 GSP 页面中使用它而不是它链接到控制器的页面时,我必须传递控制器名称。问题是我不知道如何,而且我不知道确定它是否与 URL 映射有关。

感谢您的帮助

我的 GSP 代码:

<!doctype html>
<html>
<head>
<meta name="layout" content="main"/>
<g:javascript library="jquery" plugin="jquery" />
<title>Welcome to Grails</title>
</head>
<body>
 <div class="topnav">
  <p style="color: white">Top Nav</p>
 </div>
<div class="sidenav">
 <div class="sidenavcontent" >
  <h1>HELLO!!!</h1>
  <ul>
   <g:each var="c" in="${grailsApplication.controllerClasses.sort { it.fullName } }">
   <li><g:link controller="${c.logicalPropertyName}">${c.fullName}</g:link></li>
   </g:each>
  </ul>
 <table>
  <tr>
   <g:sortableColumn property="firstName" title="FirstName"/>
   <g:sortableColumn property="lastName" title="LastName"/>
   <g:sortableColumn property="idNum" title="ID Number"/>
  </tr>
   <g:each in="${medicalautomation.InformationDocs.list()}" var="info">
    <tr>
     <td><g:remoteLink id="${info.id}" controller="informationDocs" action="show" update="showdetails">${info.firstName}</g:remoteLink></td>
     <td>${info.lastName}</td>
     <td>${info.idNum}</td>
    </tr>
   </g:each>
  </table>
 </div>
</div>
<div class="bodycont">
 <div id="showdetails"></div>
</div>

我使用 params 映射发送 controller,它正确调用了 list action,但有一个问题:

我更改了列表操作,它重定向到 g:sortableColumn 所在的 gsp 页面,但表格的顺序似乎没有改变。这是我在控制器中的代码:redirect(uri: "?sort=${params.sort}&amp;order=${params.order}")

【问题讨论】:

  • 您能否将您的 GSP 代码放在您使用此 sortableColumn 的位置以便更好地理解。
  • @ajaypanchal 我更新了帖子
  • 尝试将 params="${params}" 添加到
  • @vahid 它有效!!! Tnx
  • @vahid 我更新了这个问题,请你看一下吗?

标签: grails gsp grails-domain-class grails-controller


【解决方案1】:

据我了解,gsp 页面不是 views -> medicalautomation.informationDocs.index 一个?

...如果您要将可排序列重定向到不同的控制器,您必须负责为该控制器提供与列表方法相同的数据,该控制器最初显示 gsp 页面并且必须指定响应中的这个gsp-page ...(因为点击sortable-column后,再次显示相同的页面,带有列表,按column-name排序)

因此,你的

<g:each in="${medicalautomation.InformationDocs.list()}" var="info">

让我有点困惑,因为你在没有参数(指定排序顺序的地方)的情况下直接调用 DomainClass-list 方法,我认为你的排序顺序会被丢弃,即使你设法让它在没有的情况下显示它例外...?

在我想要显示的依赖列表有限的情况下,我经常使用 jQuery-DataTable。哪个有可能对内置的行等进行排序。

还有:

如果我想显示一小部分依赖数据,我通常使用 jQuery.ajax 调用来获取数据并通过 jQuery/Javascript 修改 html ...

希望我能帮上一点忙。

【讨论】:

  • 是的,它不是控制器 gsp。并进行解释。正如您提到的单击 g:sortableColumn 调用控制器的列表操作
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 2010-12-31
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
相关资源
最近更新 更多