有没有办法找出正在评估的当前视图(或gsp文件)?
由于URL映射和转发,RequestURI不起作用.
我正在尝试根据当前的GSP文件动态检索资源.例如,如果正在执行product/view.gsp,我想要包含product/view.css和product/view.js(如果它们存在).我遇到问题的部分是获取文本"视图"
我有一个用例,我需要首先enum在GSP页面上显示值作为下拉列表,让用户选择其中一个值,然后最终将数据绑定到域.
所以我在GSP上的代码看起来像我的枚举 MyEnum
<g:select from="${MyEnum.getAllEnumList()}" optionValue="name" name="duration"/>
Run Code Online (Sandbox Code Playgroud)
我的枚举是
public enum MyEnum {
MIN15('15 Minutes'),
MIN30('30 Minutes'),
HOUR1('1 Hour'),
HOUR2('2 Hours'),
HOUR5('5 Hours'),
HOUR8('8 Hours'),
HALFDAY('half day'),
FULLDAY('full day')
private final String name
private final String displayName
public static final List<MyEnum> getAllEnumList() {
[MIN15,MIN30,HOUR1,HOUR2,HOUR5,HOUR8,HALFDAY,FULLDAY]
}
public String toString() {
return displayName
}
MyEnum(String name,String displayName) {
this.name = name
this.displayName = displayName;
}
}
Run Code Online (Sandbox Code Playgroud)
当我点击页面时,它显示如下错误:
Error processing GroovyPageView: Error executing tag <g:form>: Error evaluating expression [MyEnum.getAllEnumList()] on line [37]: …Run Code Online (Sandbox Code Playgroud) 我创建一个GSP表单,我希望使用$ .ajax()调用提交.
我知道GSP会被渲染到浏览器看到的最终HTML中,因此javascript可以调用普通的HTML元素.
我的表单是这样创建的:
<g:form action="save" id="callmeForm" >
<fieldset class="form">
<g:render template="form"/>
</fieldset>
<fieldset class="buttons">
<g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
</fieldset>
</g:form>
Run Code Online (Sandbox Code Playgroud)
但是当最终表单以HTML格式呈现时,它缺少我在标记中给出的id字段:
<form action="/racetrack/callback/save/callmeForm" method="post" >
<fieldset class="form">
etc...
Run Code Online (Sandbox Code Playgroud)
有没有办法让我可以获取id属性,所以我可以用javascript的id引用表单?
简单的问题:我有一个服务类(比方说helpersService)和一个方法def constructURI(params).如何从模板视图中调用此方法.
我尝试了以下代码但没有成功
<% def helpersService = new HelpersService() // or def helpersService
%>
<img src="${helpersService. constructURI(params)}"/>
Run Code Online (Sandbox Code Playgroud)
但我得到以下结果:
No signature of method: com.HelpersService. constructURI() is applicable for argument types...
Run Code Online (Sandbox Code Playgroud)
或(如果我使用def helpersService)
Cannot invoke method constructURI() on null object
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我知道这很简单,但我不知道.
我在gsp文件中使用了println,并期望在控制台中打印输出.但这在页面上显示.
<%
for(int i =0; i < threads.size();i++) {
println i
}
%>
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有一个问题,在GSP文件的javascript代码中使用grails变量值.
例如:我有一个会话值session.getAttribute("selectedValue"),我想在javascript代码部分中使用这个值.
我的解决方案现在(在GSP内):
<%
def js = new String("<script type=\"text/javascript\">")
js += "var jsSelectedValue = " + session.getAttribute("selectedValue") + ";"
js += "</script>"
out << js
%>
Run Code Online (Sandbox Code Playgroud)
然后我用jQuery Stuff在我的GSP里面有javascript块等等,我需要这个值.
还有另一种方法可以在纯JavaScript代码中访问grails变量吗?
第二个问题,恰恰相反.我在下拉框中选择并单击"保存",然后我想在JS-part的会话变量中存储值$("#select-box").val().
非常感谢您的帮助.
干杯,
马尔科
我有以下组合框:
<g:select name="ticketType" from="${app.domain.enums.TicketType?.values()}"
keys="${app.domain.enums.TicketType.values() }"
value="${ticketInstance?.ticketType}"
noSelection="${['null': 'Select One...']}"
/>
Run Code Online (Sandbox Code Playgroud)
我在命令对象中为ticketType设置了以下约束
ticketType nullable: true, blank:true
Run Code Online (Sandbox Code Playgroud)
TicketType是一个非常简单的枚举:
public enum TicketType {
QUESTION, SUPPORT, MAINTENANCE, NEW_FUNCTIONALITY, MALFUNCTION
}
Run Code Online (Sandbox Code Playgroud)
每次我没有在我的GSP中为ticketType设置一些值时,我收到以下错误:
Failed to convert property value of type 'java.lang.String' to required type 'com.coming.enums.TicketPriority'
Run Code Online (Sandbox Code Playgroud)
这就像没有选择g:select设置"null"(字符串)的值.
我错过了什么?
我是grails的新手.我遇到了一个set标签,我们可以在gsp页面中使用它来设置与控制器设置模型类似的值.
<g:set var="home" value="something" />
Run Code Online (Sandbox Code Playgroud)
因此,当我们写$ {home}时,它输出"something".
有没有办法在gsp页面本身的会话中设置值,而不是使用set tag 在控制器中设置值?
我在我的域对象中有一个字段,我将其定义为整数...
Integer minPrice
Run Code Online (Sandbox Code Playgroud)
然后我在GSP页面中访问它,如下所示:
${fieldValue(bean: myBean, field: 'minPrice')}
Run Code Online (Sandbox Code Playgroud)
我在HTML中得到的是......
100,000
Run Code Online (Sandbox Code Playgroud)
这不是一个整数,它是一个字符串.更糟糕的是,它是特定语言环境中的格式化字符串.
这是一个问题,因为我对HTML FORM有一个SELECT控件,它具有minPrice的(非序数)值范围,我希望将其存储在我的域对象中作为整数,我不想存储索引到我必须在它们之间反复映射的一些值数组,我想要值本身.
我的选择控件看起来像这样......
<g:select name="minPrice"
value="${fieldValue(bean: personInstance, field: 'minPrice')}"
onchange="setDirty()"
noSelection='${['0':'Select a number...']}'
from="${[
['name':'100,000', 'id':100000],
['name':'200,000', 'id':200000],
['name':'300,000', 'id':300000]
]}"
optionKey="id" optionValue="name"
/>
Run Code Online (Sandbox Code Playgroud)
当我从SELECT字段获取值以回发到服务器时,它正确地具有一个Integer值,我坚持这个值.但是,返回行程从不预先选择下拉列表中的右行,因为值是以逗号分隔的字符串.
这在我的代码中的其他地方可以很好地用于小数字,其中逗号格式化不起作用,并且SELECT的往返进出成功.但值> 999不起作用.
文档说"此标记将检查已成为数据绑定主题的bean,并从数据绑定期间填充的bean的errors对象中包含的最初提交的值或bean的属性值获取字段的值.获得该值后,它将自动进行HTML编码."
这是我想要避免的最后一点,因为它似乎格式化整数.那么,我需要知道什么样的Grails/GSP魔法,所以我可以将我的整数渲染为整数到我的SELECT并预先选择正确的行?
编辑: 我已经根据下面的答案尝试了一些进一步的事情,到目前为止相当令人失望的结果......
如果我将<gformatNumber/>标记放入我<g:select/>的浏览器中,我将页面代码作为文本.
<g:select name="minPrice"
value='<g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}" format="#" />'
onchange="setDirty()"
noSelection='${['0':'Select a number...']}'
from="${[
['name':'100,000', 'id':100000],
['name':'200,000', 'id':200000],
['name':'300,000', 'id':300000],
]}"
optionKey="id" optionValue="name"
/>
Run Code Online (Sandbox Code Playgroud)
使用GSP中的数字格式标签对我的整数值100000这样...
var x = <g:formatNumber number="${fieldValue(bean: personInstance, field: …Run Code Online (Sandbox Code Playgroud) 自从我真正使用J2EE以来已经有很长一段时间了,请原谅我的无知.我最近参与Grails项目,再次引起了我对Java的兴趣,特别是在Grails中,因为它使得在Java平台上构建Web应用程序再次变得有趣.话虽这么说,我希望专家评论我对使用Grails构建的应用程序的以下要求:
设计团队(Web设计人员)需要访问GSP页面并编辑视图文件(布局,模板等),而无需打扰开发团队(软件开发人员).这种情况可以在构建期间和部署到生产之后进行.
设计人员,开发人员和业务用户之间的沟通水平不是问题.但是,大约40%的时间,业务部门涉及对前端的请求更改,这对开发人员的时间没有影响,但需要设计团队成员的时间.目前,部署工作流程遵循Grails应用程序,通过将War文件部署到Tomcat服务器.我想有一种更简单的方法可以让设计团队在不经过构建和部署生命周期的情况下进行UI更改.
一些设计团队成员过去曾接触过PHP,有时会错过覆盖模板文件以使UI功能更加实用或改进布局模板的能力.我希望在Grails中有类似的方式来适应这种简单性.有人告诉我,爆炸War文件可能是一个选项,但仍然需要重新加载Tomcat托管的应用程序.
如果您认为我以错误的方式查看所需的解决方案,请加入,因为我对所有相关团队成员的可行妥协感兴趣.谢谢.