g:sortableColumn缺少控制器名称(如何将控制器名称传递给g:sortableColumn?)

时间:2016-09-06 05:38:15

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

我正在为我的表使用 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>

  

我使用参数地图发送控制器,并正确调用列表操作但出现问题:

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

1 个答案:

答案 0 :(得分:1)

据我所知,gsp-page不是 观看次数 - &gt; medicalautomation.informationDocs.index 一个?

...如果要将sortable-column重定向到另一个控制器,则必须承担责任,为最初显示gsp-page且必须指定的此控制器提供与list-method相同的数据响应中的这个gsp-page ...(因为在点击sortable-column之后,再次显示相同的页面,列表,按列名排序)

因此,你的

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

让我感到困惑,因为你直接调用DomainClass-list方法而没有params(指定了排序顺序)并且我认为你的排序顺序会被丢弃,即使你管理它以显示它例外......?

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

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

希望我能帮上忙。