是否有过以下情况:
def user = User.get(springSecurityService.principal.id)
Run Code Online (Sandbox Code Playgroud)
过度
def user = springSecurityService.currentUser
Run Code Online (Sandbox Code Playgroud)
我能想到的是阻止懒惰或确保您当前正在操作的数据不是陈旧的?
我正在使用同步器令牌模式用于标准表单(useToken = true)但我找不到任何推荐的方法来处理这个通过AJAX.
编辑
自从发布这个以来,我已经推出了我自己的解决方案,其中包含了Grails现有模式.
在jQuery ajax中,我发布了整个表单(包括Grails的注入SYNCHRONIZER_TOKEN和SYNCHRONIZER_URI隐藏字段),以便withForm闭包可以在控制器中按预期执行.
问题是,成功响应后,没有新的令牌集(因为页面没有重新加载,并且没有引发g:form taglib)所以我在控制器中手动执行此操作,调用与g:form相同的库taglib,并在ajax响应中返回它,然后重置隐藏的字段值.见下文:
var formData = jQuery("form[name=userform]").serializeArray();
$.ajax({
type: 'POST',
url: 'delete',
data: formData,
success: function (data) {
// do stuff
},
complete: function (data) {
// Reset the token on complete
$("#SYNCHRONIZER_TOKEN").val(data.newToken);
}
})
Run Code Online (Sandbox Code Playgroud)
在控制器中:
def delete(String selectedCommonName) {
def messages = [:]
withForm {
User user = User.findByName(name)
if (user) {
userService.delete(user)
messages.info = message(code: 'user.deleted.text')
} else {
messages.error = message(code: 'user.notdeleted.text')
}
}.invalidToken {
messages.error = message(code: 'no.duplicate.submissions')
}
// …Run Code Online (Sandbox Code Playgroud) 我试图在Grails中的两个域类之间实现两种不同类型的关系.
考虑以下; 我有两个域类,一个作者和书类,作者有很多书.
class Author{
String name
}
class Book{
String title
static belongsTo = [author:Author]
}
Run Code Online (Sandbox Code Playgroud)
以上描述了作者和书之间非常基本的一对多关系.但我也希望作者有一个喜欢的书籍列表的概念.理想情况下,这将表示为单独的一对多关系,将同一Book对象描述为列表并保持原样.
class Author{
String name
static hasMany = [favouriteBooks: Book]
static mapping = {
favouriteBooks joinTable: [name: 'favourite_books',
key: 'author_id']
}
}
class Book{
String title
static belongsTo = [client:Client]
}
Run Code Online (Sandbox Code Playgroud)
我试图像上面那样描述这个(在许多其他方法中)并且最终没有创建数据库表(favourite_books).我没有得到任何错误.这是我能想到的唯一方法,不使用任何额外的对象,我希望避免使模型保持简单.我觉得我走在正确的轨道上,但也许错过了一些重要的拼图.
任何帮助将非常感激.
考虑一下Java中的Message对象,该对象存储一些文本。
public class Message {
private String text;
private boolean containsDigit;
public Message() {
//constructor
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public boolean isContainsDigit() {
return containsDigit;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个持久的对象。
我在构造函数中设置数据没有问题,但是可以在创建对象之后设置消息的文本字段,并且在设置文本时,此后还可以对containsDigit字段进行查询。显而易见的方法是在设置器中:
public void setText(String text) {
// presume existence of method to check for digit
if(text.containsDigit())
this.containsDigit = true;
this.text = text;
}
Run Code Online (Sandbox Code Playgroud)
但这是否会由于setter方法中的逻辑而导致任何“最佳实践”警报响起?
有人会建议替代实施吗?
编辑
我可能应该补充一点,该containsDigit字段是必需的,因为该对象是持久性的,因此containsDigit可以随后查询该字段。另外,在使用Spring / Hibernate引擎的应用程序中,在重新读取/写入对象时会不断调用此setter,因此也想知道这样做的实用性/效率。
我有一个连接多个表的查询,这些表的性能很差,因此我使用试错法创建复合索引,尝试根据我正在过滤的列来改善性能,但是我没有得到所需的结果.我正在使用EXPLAIN计划来尝试确定合适的索引策略.
任何人都可以提出另一种可以帮助解决此问题的工
我有以下代码显示带有绝对定位标记的地图。它运行良好,但我有一个新的要求,即响应屏幕尺寸的变化(移动优化)。
是否有可能实现这一点,以便标记调整到正确的位置,在这种情况下是在阿拉斯加和格陵兰,随着屏幕调整大小(水平)。
.map-marker {
position: absolute;
font-size: 20px;
text-shadow: 1px 1px 1px #000;
text-decoration:none;
}
.map-marker span {
position:relative;
z-index: 2;
color:#fff;
}
.map-marker:before {
content: "\f111";
font-family: 'FontAwesome';
position: relative;
right: -14px;
z-index: 0;
}
#one {
top: 70px;
left: 20px;
}
#two {
top: 50px;
left: 260px;
}Run Code Online (Sandbox Code Playgroud)
<link href="https://netdna.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" />
<div class="map_container">
<img src="http://geology.com/world/world-map-clickable.gif" />
<a href="#" id="one" class="map-marker">
<span aria-hidden="true">1</span>
</a>
<a href="#" id="two" class="map-marker">
<span aria-hidden="true">2</span>
</a>
</div>Run Code Online (Sandbox Code Playgroud)
由于升级到 Grails 4,迁移脚本似乎没有从它们的配置位置加载。这会导致以下错误;
liquibase.exception.ChangeLogParseException:java.lang.IllegalArgumentException:要编译的脚本文本不能为空!
到目前为止,我只在 gradle config 上指定了位置;
sourceSets {
main {
resources {
srcDir 'grails-app/migrations'
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经添加了插件提供的附加配置,但无济于事;
grails.plugin.databasemigration.changelogLocation = 'grails-app/migrations'
Run Code Online (Sandbox Code Playgroud)
通过调试,我可以看到grails-app/migrations路径似乎没有添加到位置列表中,但也发现了grails-app/conf,所以我暂时将它们全部放在那里,瞧...应用程序启动了。
有人知道这是插件的已知问题还是缺少配置?
我一直在寻找与JUnit中的以下便捷方法相当的Spock,您可以进行"近似"比较.有谁知道这样的事情是否存在?
/**
* Asserts that two doubles or floats are equal to within a positive delta.
*/
assertEquals(double expected, double actual, double delta)
Run Code Online (Sandbox Code Playgroud)