如何找到widgetVar?

时间:2013-06-28 17:59:08

标签: javascript jsf-2 primefaces

如果我有一个primefaces组件,比如

<p:selectOneMenu id="myComponent">
...
</p:selectOneMenu>

在html中,它会生成如下内容:

<div id="myFormName:myComponent" widgetVar="lollipop">
...A lot of things in here...
</div>
<script id="myFormName:myComponent_s">
   $(function(){PrimeFaces.cw('SelectOneMenu','lollipop',.......
</script>

在脚本标记内,你可以注意到widget var name(如果我不在组件中提供它,它将被生成)。 我想知道如何获取widget var元素,或者如果这不可能,我怎么能得到那个“”标签,这样我才能得到这个widget var的名字。

------编辑------ 我会试着解释为什么我需要这个。 我有这个功能:

function simulaTabManoBrow(event){
    var focusedComponent=document.activeElement;
    if(event.keyCode==13){
        //Cancel th edefault enter event(submit the form)
        event.preventDefault();
        event.stopPropagation();
        event.returnValue = false;
        event.cancelBubble = true;
        if((focusedComponent.tagName.toLowerCase()=="input" && focusedComponent.type.toLowerCase()=="button") || focusedComponent.tagName.toLowerCase()=="button"){
            //If the focused component is a button, click the button.
            focusedComponent.click();
        }else{
            //Press the tab key programatically
            $.emulateTab();
            verifyOneMenu(campoFocado);
        }
    }
}

此函数在body的onkeydown事件上执行。 这样做的目的是通过tab键替换enter键的默认行为。 唯一的问题是,当焦点组件是selectOneMenu并且用户点击进入时,它的行为类似于tab键,但是之前关注的selectOneMenu是打开的(因为这是组件的默认行为)。

所以,我想要做的是调用之前关注的组件的selectOneMenu小部件var的close()方法。

4 个答案:

答案 0 :(得分:9)

您可以使用这个方便的函数通过id获取widgetVar对象:

<强>功能

function getWidgetVarById(id) {
   for (var propertyName in PrimeFaces.widgets) {
     if (PrimeFaces.widgets[propertyName].id === id) {
       return PrimeFaces.widgets[propertyName];
     }
   }
}

<强>用法

getWidgetVarById('myFormName:myComponent');

示例

getWidgetVarById('dialogId').show();

查看更多内容:

答案 1 :(得分:1)

生成窗口小部件var的算法非常简单:

  1. 取元素的ID
  2. 将冒号[{1}}转换为下划线:
  3. 在开始时附加_
  4. 例如,如果您的元素的ID为widget_,则小部件将为main:personal:age

    组件的JSF id与相应html标签的id属性相同。

答案 2 :(得分:1)

自PrimeFaces 5.3起,您可以轻松做到:

PrimeFaces.getWidgetById(domElementId);

请参见https://github.com/primefaces/primefaces/blob/5_3/src/main/resources/META-INF/resources/primefaces/core/core.js#L22

答案 3 :(得分:0)

在PrimeFaces 6.1中,您可以找出由以下规则指定的widgetVar。它与上面显示的示例类似,但在PrimeFaces的更高版本中,它们似乎包含表单ID。

例如:

"widget_" + <form id> + "_form_" + <selectBooleanCheckbox id>

注意:在我的情况下,ID有破折号。破折号转换为下划线。如上所示,它也可能与冒号的转换相同。

例如,您有:

<h:form id='my-page'> and <p:selectBooleanCheckbox id='the-checkboxes'>

widgetVar将是:

"widget_my_page_form_the_checkboxes"

查看您的页面来源以进行验证。

现在获取对象,然后点击它......

P('widget_my_page_form_the_checkbox').click();