6

如果我有一个 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>

在脚本标签内,您可以注意到小部件 var 名称(如果我没有在组件中提供它,它将生成)。我想知道如何获取小部件 var 元素,或者如果这不可能,我如何获取该“”标签,以便获取此小部件 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 并且用户按 Enter 键时,它的行为与 tab 键一样正确,但之前焦点的 selectOneMenu 被打开(因为这是组件的默认行为)。

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

4

4 回答 4

9

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

功能

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();

看更多:

于 2014-04-09T07:04:14.010 回答
2

从 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

于 2019-11-08T08:51:04.597 回答
1

生成小部件变量的算法非常简单:

  1. 获取元素的id
  2. 将冒号转换:为下划线_
  3. widget_在开始时附加

因此,例如,如果您的元素的 id 是main:personal:age,那么小部件就是widget_main_personal_age

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

于 2013-07-02T07:03:33.377 回答
1

在 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();
于 2017-10-26T14:57:58.183 回答