【问题标题】:Hide a panel until a blur event is invoked隐藏面板直到调用模糊事件
【发布时间】:2013-05-02 02:55:35
【问题描述】:

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

错误 [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>
...

【问题讨论】:

  • 你试试:
  • @RongNK 发布答案。

标签: javascript jsf primefaces


【解决方案1】:

update 属性用于在 ajax 调用完成后更新组件。如果你想在ajax调用完成后调用一些javascript函数,你必须使用oncompleteonsuccessfullonerror(你的选择):

  • 在你的情况下,你试试

    <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>
    

【讨论】:

  • 您好,谢谢!但不幸的是,它不起作用。网格是隐藏的,但是当我尝试输入一些文本并移动到另一个 inputText 时,网格没有显示出来......
  • 我刚刚更新了我的答案,你应该使用面板而不是面板网格,并且你使用可见属性,对不起我的错误!
  • 那我必须把panelGrid放在panel标签之间?
  • 是的,然后你可以改变panel的css,看起来好像不用Panel。
  • 如果你不想要Panel(只是panelGrid),你应该创建javascript函数,或者使用渲染属性......
猜你喜欢
  • 2022-09-26
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
相关资源
最近更新 更多