2011-08-19 99 views
0

我尝试添加使用rich:findComponent作为动态onclick事件:丰富的javascript函数findComponent

<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,由ChannelPerformanceController类别的字段resetDate提供。

我也写在JSP页面JavaScript方法:

function setResetDate(id, date) { 
    #{rich:findComponent('benchmarkEndDate').value} = date; 
} 

不工作。它被称为: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; 
} 

我做错了什么?我怎样才能做到这一点?

+0

did you try:function setResetDate(id,date){ “#{rich:findComponent('benchmarkEndDate')。value}”= date; } - 注意引用围绕表达式 – reevesy

+0

它呈现为函数setResetDate(id,date){ \t \t \t“2011-03-24 00:00:00.0”= date; \t \t} –

回答

2
  • JavaScript由客户端执行。
  • 表达式在将标记发送给浏览器之前,在服务器上评估语言表达式。

#{foo = bar}不是有效的EL表达式。在EL中,=不是有效的操作符。 EL没有分配操作员。通过EL分配值的唯一方法是在支持它们的属性中使用值绑定(几乎完全通过JSF输入控件)。


如果该表达式求值:

#{rich:clientId(id)} 

这个表达式将搜索requestsessionapplication范围使用getAttribute("id")看,使用托管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完成。