隐藏面板,直到调用模糊事件

时间:2013-05-02 02:55:35

标签: javascript jsf primefaces

如果在用户输入style上的文字后调用事件模糊,如何更新第二个panelGrid上的licplate?我尝试了下面的代码,但它出错了:

  

错误[http-bio-8080-exec-28] [render_portlet_jsp:154]   javax.faces.FacesException:找不到带标识符的组件   “panelInfo.Show()”从

引用
<p:panelGrid styleClass="noborder valigntop">
    <p:row>
        <p:column>
            <p:panelGrid styleClass="noborder">
                <p:row>
                    <p:column>
                        <p:inputText id="licplate" value="#{gateBacking.queue.fleet}" >
                            <p:ajax event="blur" update="panelInfo.Show();" />
                        </p:inputText>
                    </p:column>
                </p:row>
            </p:panelGrid>
        </p:column>
        <p:column>
            <p:panelGrid widgetVar="panelInfo" styleClass="border" style="visibility:hidden;">
                <p:row>
                    //---
                </p:row>
            </p:panelGrid>
        </p:column>
    </p:row>
</p:panelGrid>

谢谢!


修改

代码显示隐藏的面板,但在此之后,该按钮不起作用。

...
<p:tab id="tabXXX" title="XXX"> 
    <h:form id="frmXXX">
        <script type="text/javascript">
            function test(){
                 $(PrimeFaces.escapeClientId('frmXXX:opt')).css("display","block");
            }
        </script>

        <p:messages id="prmMessage" autoUpdate="false" closable="true" />

        <p:panelGrid id="pnlXXX">
            <p:row>
                <p:column>
                    <p:panelGrid>
                        <p:row>
                            <p:column><p:outputLabel for="valLbl" value="Value : " /></p:column>
                            <p:column>
                                <p:inputText id="valLbl" value="#{...}" required="true">
                                    <p:ajax event="blur" update="olLicPlate" oncomplete="test();" />
                                </p:inputText>
                            </p:column>
                            <p:column><p:message for="valLbl" display="icon" /></p:column>
                        </p:row>
                    </p:panelGrid>
                </p:column>
                <p:column>
                    <p:outputPanel id="opt" style="display:none;">
                        <p:panelGrid id="pnlInfo">
                            ...
                        </p:panelGrid>
                    </p:outputPanel>
                </p:column>
            </p:row>
            <p:row>
                <p:column colspan="2">
                    <p:panelGrid>
                        <p:row>
                            <p:column>
                                <p:commandButton id="btnAdd" value="Add"
                                    action="#{...}" process="@form"
                                    update="pnlXXX,prmMessage"></p:commandButton>
                            </p:column>
                        </p:row>
                    </p:panelGrid>
                </p:column>
            </p:row>
        </p:panelGrid>
    </h:form>
</p:tab>
...

1 个答案:

答案 0 :(得分:4)

ajax调用完成后,

update属性用于更新组件。如果您想在ajax调用完成后调用某些javascript函数,则必须使用oncomplete onsuccessfullonerror(您的选项):

  • 在您的情况下,您尝试

    <p:ajax event="blur" oncomplete="panelInfo.show();" />
    
    <p:panel visible="false" widgetVar="panelInfo">
                //content here
    </p:panel>
    
  • 您可以使用outputPanel,我已经使用ajax进行了测试:

         <h:form id="description">            
            <script type="text/javascript">
                function test(){
                     $(PrimeFaces.escapeClientId('description:opt')).css("display","block");
                }
            </script>
            <p:outputPanel id="opt" style="display:none;">
                <p:commandButton process="@this" value="test" actionListener="#{user.Test}"/>
            </p:outputPanel>
            <p:inputText id="licplate" value="zzzz" >
                <p:ajax event="blur" oncomplete="test();" />
            </p:inputText>
        </h:form>