我正在尝试使用rich:findComponent
添加动态onclick事件:
<font class="topFirstTablehdCategory2" style="font-size: 12px; cursor: pointer;" onclick="#{rich:findComponent('benchmarkEndDate').value = channelPerformanceController.resetDate}">
RESET
</font>
但我得到了
com.sun.el.parser.ParseException: Encountered "=" at line 1, column 48.
我愿意做的是将字符串值设置为rich:calender
benchmarkEndDate
,其resetDate
来自ChannelPerformanceController
类的字段function setResetDate(id, date) {
#{rich:findComponent('benchmarkEndDate').value} = date;
}
。
我还在jsp页面中编写了一个javascript方法:
onclick="setResetDate('benchmarkEndDate', '#{channelPerformanceController.resetDate}')"
无效。它被称为:function setResetDate(id, date) {
2011-03-24 00:00:00.0 = date;
}
它在浏览器中呈现为:
function setResetDate(id, date) {
document.getElementById(#{rich:clientId(id)}) = date;
}
此方法:
function setResetDate(id, date) {
document.getElementById() = date;
}
改为:
{{1}}
我做错了什么?我怎样才能做到这一点?
答案 0 :(得分:2)
#{foo = bar}
不是有效的EL表达式。 =
不是EL中的有效运算符。 EL没有赋值运算符。通过EL分配值的唯一方法是在支持它们的属性中使用值绑定(几乎完全通过JSF输入控件)。
如果评估此表达式:
#{rich:clientId(id)}
此表达式将使用getAttribute("id")
搜索request,session和application范围,使用托管bean机制创建此类bean(如果使用此id定义) 。当评估它并返回null时,不会呈现任何内容。
如果此表达式未评估:
#{rich:clientId(id)}
然后将它放在模板文本中(可能在JSP 2.0 / J2EE 1.4中。)
有两种类型的EL表达式:
#{foo}
- 延迟表达式:仅在允许它们的属性中进行评估${foo}
- 立即表达:允许使用模板文字从JSP 2.1开始,在模板文本中使用延迟表达式是一个转换错误。从JSP 2.1规范:
在JSP页面的模板文本中使用时,
#{
字符序列 触发翻译错误,除非特别允许通过 配置设置。这是因为#{}
语法是关联的 专门用于JSP中的延迟评估 2.1并且在模板文本的上下文中没有意义(仅 使用${expr}
语法立即进行评估是有意义的 模板文本)。在标记文件中,模板文本中的
#{expr}
根据 标记文件的JSP版本:如果标记文件的JSP版本是2.0或更低, 模板文本中的#{expr}
不会导致任何错误。如果是标签文件的话 JSP版本在模板中等于或大于2.1,#{expr}
文本必须导致错误,除非它已被转义或标记文件 包含deferredSyntaxAllowedAsLiteral
标记指令属性 设为TRUE
。
通常,#{foo}
表达式必须仅在JSF控件属性中(对于JSP视图)。
如果要更改服务器端值,请使用表单提交和操作绑定。这可以通过RichFaces中的AJAX来完成。