在这里,我有从控制器到GSP页面传递的哈希地图。
控制器:
Map<String, List<String>> nameFiles = new HashMap<String, List<String>>();
nameFiles.put('patient1',["AA","BB","CC"]);
nameFiles.put('patient2',["DD","EE","FF"]);
model.put("nameFiles", nameFiles);
GSP页面:
var patient = getPatient();
//说我们通过某些jQuery功能获得随机患者,在neverfiles key
//check If nameFiles contain key same as patient varaible
<% nameFiles.each { fm -> %>
<% if (fm.containsKey(patient)) { %> // This if statement cannot compare dynamic sting varaaible. How to do this.
alert("Yes nameFiles contain the patient");
<% } %>
<% } %>
假设您有:
Map<String, List<String>> nameFiles = new HashMap<String, List<String>>();
nameFiles.put('patient1',[id:1,name:'Fred'])
nameFiles.put('patient2',[id:2,name:'Tom'])
让当前患者很简单:
<% def aa = nameFiles?.find{it.key=='patient1'}?.value %>
<g:if test="${aa}">
// we definitely have ${aa} and it has been made null safe
<g:if>
这将返回GSP上的{id:1, Name:Fred}
,这是列表迭代
我的天哪,如果您像在控制器中一样,我知道为什么要这样做,但这不是一个好练习,您可以创建一个taglib,该taglib获得当前价值并根据条目处理条目到给定列表中的某些东西,或者可能是针对DB Fresh All the Fresh All Profformed Proded Proded的。
最终编辑,而您可以声明变量(例如JSP),也可以使用
<g:set var="aa" value="${nameFiles?.find{it.key=='patient1'}?.value}" scope="page|session|..."/>
默认情况下为页面设置了变量,但可以将其放入会话变量,无论哪种方式,它都比<% %>
希望最终编辑
我认为人们应该仔细考虑他们的实际问题,并试图明确提出问题,否则观众最终会由于帖子的质量差而回答其他问题。
如果我正确理解,您在控制器中发生了一些事情,就像在某些列表中所产生的事情一样。缺少位必须是您正在做某种形式的表单检查也许是选择框选择,然后在jquery
中选择,您的意思是您有某种形式的Java脚本检查,以相对表单字段检查。
出于这种目的,有两种方法将此类信息泵入JavaScript世界
方法1:
//I haven't tested this, hopefully gives you the idea
var array = []
<g:each in="${namedFiles}" var="${pa}">
array.push({code:'${pa.key} listing:'${pa.value}'})
</g:each>
方法2控制器
//where you now push named files as a json
return [namedFiles as JSON].toString()
// or alternatively in gsp javascript segment something like this
var results=$.parseJSON('<%=namedFiles.encodeAsJSON()%>');
var results = results['patient1']
老实说,我没有得到你在问什么以及结果有什么样的问题,但我想您试图实施类似的东西:
<g:if test="${nameFiles[patient]}">
alert("Yes nameFiles contain the patient");
</g:if>
您可能会注意到,我试图避免scriptlet弄乱并使用了grails自定义标签。
我也很难想象您将如何调用jQuery函数以获取变量,然后将其用于在服务器端生成视图。但是,首先尝试定义一些模拟"患者"变量来测试我的样本。
如果"患者"变量值仅在客户端可用 - 因此您必须更改该方法并在服务器上生成警报。
upd另一方面,您可以在控制器中返回您的名字作为JSON,然后在客户端与JavaScript解析此JSON:
:var nameFiles = JSON.parse("${nameFiles}")
if (nameFiles.hasOwnProperty(patient)) {
alert("Yes nameFiles contain the patient");
}
我没有测试此代码,但是至少您指出了GSP在服务器上渲染,并且可以将地图转换为JSON,将其传递给视图,用JavaScript解析并生成所需的警报。
gsp
中的变量声明您可以在<% %>
括号内声明变量:
<% patientIdentifier = 'randomName' %>
有关更多详细信息,请参见有关变量和范围的Grails文档。
检查患者是否包含在名为Files
中您无需在地图上迭代。只需检查地图是否包含密钥。
// check if nameFiles contains key same as patient variable
<% if (nameFiles.containsKey(patient)) { %>
alert("Yes nameFiles contains the patient");
<% } %>