丰富的 javascript 函数 findComponent

发布于 2024-11-30 07:38:53 字数 1253 浏览 0 评论 0原文

我正在尝试使用 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其 id 是从 ChannelPerformanceController 类的 resetDate 字段提供的 benchmarkEndDate

我还在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;
}

我做错了什么?我怎样才能实现这个目标?

I am trying to add a dynamic onclick event using rich:findComponent as:

<font class="topFirstTablehdCategory2" style="font-size: 12px; cursor: pointer;" onclick="#{rich:findComponent('benchmarkEndDate').value = channelPerformanceController.resetDate}">
    RESET
</font>

But I am getting

com.sun.el.parser.ParseException: Encountered "=" at line 1, column 48.

What I am willing to do, is to set string value to a rich:calender whose id is benchmarkEndDate supplied from the field resetDate of ChannelPerformanceController class.

I also write a javascript method in the jsp page:

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

is not working. It is called as: onclick="setResetDate('benchmarkEndDate', '#{channelPerformanceController.resetDate}')"

It is rendering in browser as:

function setResetDate(id, date) {
        2011-03-24 00:00:00.0 = date;
}

This method:

function setResetDate(id, date) {
        document.getElementById(#{rich:clientId(id)}) = date;
}

is change into :

function setResetDate(id, date) {
        document.getElementById() = date;
}

What I am doing wrong? How can I achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

熟人话多 2024-12-07 07:38:53
  • JavaScript 由客户端执行。
  • 在将标记发送到浏览器之前,表达式语言表达式在服务器上进行计算。

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


如果计算此表达式:

#{rich:clientId(id)}

此表达式将搜索 请求会话应用程序范围使用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 视图)。


如果要更改服务器端值,请使用表单提交和操作绑定。这可以通过 AJAX 来完成丰富的面孔。

  • JavaScript is executed by the client.
  • Expression Language expressions are evaluated on the server before the markup is sent to the browser.

#{foo = bar} is not a valid EL expression. = is not a valid operator in EL. EL does not have an assignment operator. The only way to assign values via EL is using a value binding in attributes that support them (almost exclusively via JSF input controls).


If this expression is evaluated:

#{rich:clientId(id)}

This expression will search the request, session and application scopes looking using getAttribute("id"), using managed bean mechanisms to create such a bean if it is defined with this id. When this is evaluated and returns null, nothing will be rendered.


If this expression is not evaluated:

#{rich:clientId(id)}

Then it is being placed in template text (probably in JSP 2.0/J2EE 1.4.)

There are two types of EL expression:

  • #{foo} - deferred expression: only evaluated in attributes that allow them
  • ${foo} - immediate expression: allowed in template text

Beginning with JSP 2.1, it is a translation error to have a deferred expression in template text. From the JSP 2.1 specification:

When used in template text in a JSP page, the #{ character sequence
triggers a translation error, unless specifically allowed through a
configuration setup. This is because the #{} syntax is associated
exclusively with deferred-evaluation in JSP
2.1 and does not make sense in the context of template text (only
immediate evaluation using the ${expr} syntax makes sense in
template text).

In a tag file, #{expr} in template text is handled according to the
tag file’s JSP version: If the tag file’s JSP version is 2.0 or less,
#{expr} in template text will not cause any error. If the tag file’s
JSP version is equal to or greater than 2.1, #{expr} in template
text must cause an error, unless it has been escaped or the tag file
contains a deferredSyntaxAllowedAsLiteral tag directive attribute
set to TRUE.

Generally, #{foo} expressions must be in JSF control attributes only (for JSP views).


If you want to change a server-side value, use a form submit and action binding. This can be done via AJAX in RichFaces.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文