使用Javascript在primefaces中启用/禁用SelectOneMenu

时间:2013-06-06 05:22:59

标签: javascript jsf-2 primefaces

我是JSF和Primefaces的新手。 我正在构建一个xhtml页面,其中我有两个primeface的selectonemenu。我想启用或禁用第二个selectonemenu取决于用户在第一个selectonemenu中选择的值。 为了启用/禁用我在页面中编写了Java Script,因为我想在客户端执行它,但我不知道如何在primefaces组件中调用java脚本函数。

代码示例

        <h:head>
        <style type="text/css">
    .ui-widget,.ui-widget .ui-widget {
        font-size: 12px !important;
    }
    </style>
        <script>
            function disableOneMenu() {
                alert("In Disable One Menu Function...");
                var clickedGroup = document.getElementById('groupOneMenu').value;
                alert("Selected Value " + clickedGroup);
                if (clickedGroup == "Designation") {
                    document.getElementById('designation').disabled = true;
                    alert("Location One Menu Disabled...");
                } 
            }
        </script>
        <link type="text/css" rel="stylesheet"
            href="#{request.contextPath}/themes/redmond/skin.css" />
    </h:head>
    <h:body>
        <h:form>
            <p:layout fullPage="true">
                <p:layoutUnit position="north" size="30"
                    header="HCV : Peer Group Analysis" resizable="true">
                </p:layoutUnit>
                <p:layoutUnit id="contentLayout" position="west" size="200">
                    <h:panelGrid columns="2">
                        <h:outputText value="Analyse for values of attribute: " />
                        <p:selectOneMenu id="groupOneMenu" value="#{userInput.groupAttr}"
                            style="font-size:18;font-weight:bold;color:blue;width:100">
                            <f:selectItem itemLabel="Select One" itemValue="" />
                            <f:selectItems value="#{userInput.groupAttrList}" />
                            <p:ajax event="valueChange" actionListener="disableOneMenu" />
                        </p:selectOneMenu>
                        <h:outputText value="Designation: " />
                        <p:selectOneMenu id="designatinoOneMenu"
                            value="#{userInput.designation}"
                            style="font-size:18;font-weight:bold;color:blue;width:100">
                            <f:selectItem itemLabel="Select One" itemValue="" />
                            <f:selectItems value="#{userInput.designationList}" />
                        </p:selectOneMenu>
                       </h:panelGrid>
            </p:layoutUnit>
        </p:layout>
    </h:form>
</h:body>
</html>

请帮助,我可以在xhtml页面中使用java脚本..

谢谢..

3 个答案:

答案 0 :(得分:4)

PrimeFaces组件的JavaScript API主要是记录在案的。 DOM变量上有disable()enable()个方法。

您需要使用widgetVar属性:

为此变量命名
<p:selectOneMenu id="myMenu" widgetVar="myMenuWidget" ... />

你可以在JavaScript中调用:

myMenuWidget.disable();

widgetVar必须与ID不同! IE对ids和全局JS变量使用相同的命名空间(而不是FireFox)。

答案 1 :(得分:1)

您可以使用disabled的{​​{1}}属性执行相同操作。你不需要使用java脚本。

<h:selectOneMenu>

和Bean可以写成:

<h:body>
    <h:form>
        <h:outputText value="#{test.visible}"/>
        <h:selectOneMenu valueChangeListener="#{test.valuChangeHandler}" onchange="submit()" immediate="true">
            <f:selectItems value="#{test.opList}"/>
        </h:selectOneMenu>
       <h:selectOneMenu disabled="#{!test.visible}">
            <f:selectItems value="#{test.testList}"/>
       </h:selectOneMenu>
    </h:form>
</h:body>

看看这是否有帮助!

答案 2 :(得分:0)

试试吧!

<script>
  function disableOneMenu() {

    PF('designatinoOneMenuWV').disabled();
  }
</script>

<p:selectOneMenu id="groupOneMenu" value="#{userInput.groupAttr}" 
      style="font-size:18;font-weight:bold;color:blue;width:100" onchange="disableOneMenu()">
  <f:selectItem itemLabel="Select One" itemValue="" />
  <f:selectItems value="#{userInput.groupAttrList}" />
</p:selectOneMenu>

<p:selectOneMenu id="designatinoOneMenu" widgetVar="designatinoOneMenuWV"
      value="#{userInput.designation}" style="font-size:18;font-weight:bold;color:blue;width:100">
  <f:selectItem itemLabel="Select One" itemValue="" />
  <f:selectItems value="#{userInput.designationList}" />
</p:selectOneMenu>