1

我有一种情况,我必须在以下 JSF 页面中的页面加载时执行命令按钮操作侦听器

        <?xml version='1.0' encoding='UTF-8'?>
        <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
         xmlns:f="http://java.sun.com/jsf/core"
         xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
         xmlns:trh="http://myfaces.apache.org/trinidad/html">
        <jsp:directive.page contentType="text/html;charset=UTF-8"/>

        <f:view>

       <af:document id="d1" partialTriggers="pt1">
       <af:resource type="javascript">  
       function callCustomButton(){
       var button =AdfPage.PAGE.findComponentByAbsoluteId("cbCustomFields");
       ActionEvent.queue(button,true);
       }
       </af:resource>



     <af:clientListener method="callCustomButton" type="load"/>

      <af:form id="f1">
     <af:pageTemplate viewId="/ESOPM_Base_Template.jspx" id="pt1">



    <f:facet name="main_content">

    <af:decorativeBox id="db1" theme="medium">
        <f:facet name="top"/>
        <f:facet name="center">
        <af:panelGroupLayout layout="scroll" id="pgl2"> 
        <trh:tableLayout id="tblUpload" cellPadding="3" cellSpacing="3"  halign="center" inlineStyle="font-size:1.2em; font-weight:bold; font-family:helvetica,sans-serif;">
                <trh:rowLayout id="rl1">

                    <trh:cellFormat id="cf1">            
                        <af:panelGroupLayout layout="horizontal" id="pgl3">

                   <af:commandButton text="Custom Fields"                       

                  actionListener="#{EditProperties.generateCustomAttributeFields}" 
                  id="cbCustomFields"  partialSubmit="true"  visible="true"/>
                        </af:panelGroupLayout>
                    </trh:cellFormat>
                </trh:rowLayout>

                  </trh:cellFormat>
              </trh:rowLayout>

        </trh:tableLayout>
        </af:panelGroupLayout>
        </f:facet>
        </af:decorativeBox>
        </f:facet>
</af:pageTemplate>
</af:form>
</af:document>
</f:view>

</jsp:root>

命令按钮是“自定义字段”,我试图通过客户端侦听器在页面中使用的 javascript 调用它。但是当用户加载此页面时,按钮不会被点击,并且其动作监听器操作也不会被执行。请帮忙。

4

2 回答 2

1

这是 adf-stuff JSF 2 吗?如果是这样,您可以使用 preRenderViewlistener 在页面加载时执行服务器端的操作:

<f:view>
    <f:metadata>
      <f:event type="preRenderView" listener="#{bean.doSomething}"/>
    </f:metadata>
</f:view>

更新

另一种方法是使您的支持 bean 请求范围并使用 @PostConstruct 注解来初始化数据:

@ManagedBean
@RequestScoped
public class Bean {
    @PostConstruct
    public void init (){

    }  
}

如果你有机会切换到另一个 JSF 组件库,我会推荐 Primefaces。它们为通过客户端脚本执行支持 bean 方法提供了一个非常简单的解决方案。请<p:remoteCommand>参阅https://www.primefaces.org/showcase/ui/ajax/remoteCommand.xhtml

于 2012-09-05T21:11:25.173 回答
1

在 f:view(托管 bean)中创建一个 afterMethod 并监听 RENDER_RESPONSE 阶段。然后通过调用调用 JS

String script = "callCustomButton();";
FacesContext fctx = FacesContext.getCurrentInstance();  
//Trinidad class
ExtendedRenderKitService erks = null;  
//Service also is a Trinidad class
erks = Service.getRenderKitService(fctx, ExtendedRenderKitService.class);
erks.addScript(fctx, script);

确保通过在视图范围内设置内存标志来避免双重调用

Frank Ps 您是否尝试过在服务器上调用该函数,以便在托管 bean(侦听器)中对动作事件进行排队

于 2012-09-06T05:25:56.193 回答