无法使用#{rich:component(Id)}或RichFaces访问java脚本中的丰富组件。$(Id)

时间:2015-08-21 23:19:03

标签: javascript richfaces jsf-1.2

新手在这里javascript。尝试使用我在网上找到的示例访问RichFaces组件的内部,但没有太多运气。

RichFaces 3.3和JSF 1.2,jboss服务器,Chrome,ant。

我见过像

这样的例子
#{rich:component(formId)}
RichFaces.$(stHourId)

但是在执行时都没有被识别出来。 那么我该如何使用它们或以其他方式访问它们呢?

  • 这些在RichFaces 3.3中不可用吗?如果没有,有没有办法在3.3中做下面的例子?
  • 我的xhtml文件中是否需要一些特殊的东西才能使用它们,或者在web.xml或faces-config.xml中?

这里是具体的例子:

在javascript中访问rich:comboBox的值列表 - 在网络上找到一个示例

var valueArray = #{rich:component(formId)}.comboList.itemsValue;

页面加载时出现错误:未捕获的SyntaxError:意外的令牌。 当我查看开发人员工具控制台中的代码时,#{rich:component(formid)} 完全缺失(导致其他问题)

var valueArray = .comboList.itemsValue;

如果我删除该行但是在代码中断,并尝试在控制台中手动使用#{rich:component ...},

#{rich:component('form:recurStartMincomboboxField')}

我得到:未捕获的SyntaxError:意外的令牌ILLEGAL

RichFaces.$('form:recurStartMincomboboxField')

另一个错误:未捕获TypeError:RichFaces。$不是函数

我知道表单ID是正确的,因为以下方法有效,但我似乎无法从此处访问值列表

document.getElementById('form:recurStartMincomboboxField')

如果你想在上下文中查看相关部分:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich"> 

<head>    
    <script>         
        function checkMinute(formId, defaultVal) {
            alert('validateMinute');

            var minuteStr = document.getElementById(formId).value;

            // get list of values allowed for the combobox
            var valueArray = #{rich:component(formId)}.comboList.itemsValue;      
        }
    </script>
</head>

<body> 
    <h:form id="form">

    ......

        <rich:comboBox id="recurStartMin" value="#{filterManagerBean.recurStartMin}" required="false" 
                       selectFirstOnUpdate="true" defaultLabel="" enableManualInput="true" width="50"
                       onchange="checkMinute('form:recurStartMincomboboxField', '00')"
                       > 
             <f:selectItems value="#{filterManagerBean.minuteOptions}" />
        </rich:comboBox>

    ......

    </h:form>
</body> 

</html>

一直在尝试各种各样的事情和搜索,非常沮丧:(

2 个答案:

答案 0 :(得分:1)

您缺少facelets,添加

    xmlns:ui="http://java.sun.com/jsf/facelets"

example combo boxes

extended example显示使用jQueryval()来处理此问题。与任何非常新的一样,教程首先使用示例中的数据和细节来解决小问题。

答案 1 :(得分:1)

#{rich:component('recurStartMincomboboxField')}

这是表达式语言(EL)而非JavaScript,请参阅tutorial

您无法在客户端执行EL,因为服务器可以使用它(它有点像内联Java代码)。 EL表达式在页面加载时执行,因此如果要使用它,您必须事先知道id,或者必须在服务器上提供id。或者您可以使用纯JavaScript:

document.getElementById('form:recurStartMincomboboxField').component
RichFaces 3中没有

RichFaces.$