[英]grails list and createCriteria()
我有一个 grails 网络应用程序的列表功能。 此列表将根据某些搜索条件填充表格。 我使用 hibernate createCriteria 来尝试实现这一点。
在这种情况下,他们可以通过 2 个不同的关键特征进行搜索。 用户名和用户编号。
我唯一的问题是尝试调整函数,以便如果它找到空值,它会提示用户其中一个值为空。 用户名必须有一个 userNumber。 如果由于某种原因 userNumber 出现 null 那么它需要提示用户。 或者如果没有找到username和userNumber的组合,也会提示用户。
这是我的带有搜索条件的列表功能。 底部的 println 用于调试并显示了我想要做什么。
def list(params) {
//TODO STILL NOT WORKING RIGHT
def userSearchCri = User.createCriteria()
def userNumber = params.searchUserNumber
def username = params.searchUsername
uerSearchCri = User.createCriteria()
def userList = userSearchCri.list() {
eq('username', username)
eq('userNumber', userNumber)
}
System.out.println("Search: " + userList.userNumber)
if(userList.userNumber == "null"){
System.out.println("OH NO! The Users Number is = " + userList.userNumber + " DO SOMETHING!")
}
[userInstanceList: userList]
}
我尝试了 createCriteria 函数的不同组合。 像 isNotNull、ilike 等……我开始认为我不能用 createCritera 做到这一点。 这是用于 createCriteria http://grails.org/doc/2.2.1/ref/Domain%20Classes/createCriteria.html的源代码。
如果有人知道我如何使用搜索条件或其他方法来实现我的目标。 我将不胜感激一些建议。
谢谢
要查看的各种关键点:
params
以查看是否传递了userName
ans/或userNumber
,ans 向用户发送回消息以提供有效信息。 通过这种方式,您可以消除用户输入错误的选项。userName/userNumber
。userName/userNumber
用户号。这是一个示例:
def list(params) {
def userNumber = params.searchUserNumber
def username = params.searchUsername
//Validate whether params are NULL or valid. Send back error message to user if validation fails
validateParams()
uerSearchCri = User.createCriteria()
def userList = userSearchCri.list() {
or{
eq('username', username)
eq('userNumber', userNumber)
}
}
if(userList){
userList.each{user->
if(!user.userName || !user.userNumber){
//Send error back if needed
}
}
}
}
数据库通常将空值作为与算术运算(例如“=”/eq)不匹配的特殊情况进行处理。 所以在你的情况下,我将做出一些假设,如果我错了,你可以纠正:
在这种情况下,您可以做的是在条件中使用or
条件,然后在获得结果后测试空值:
def userList = userSearchCri.list() {
or{
eq('username', username)
eq('userNumber', userNumber)
}
}
您可以在条件内设置条件。 另外我认为你只需要一个结果(用户名和用户号是唯一的?),所以你可以使用get()
而不是list()
def user = userSearch.get {
if(params.username) {
eq('username',params.username)
}
if(params.userNumber) {
eq('userNumber',params.userNumber)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.