<!--

    Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!-- resourceNode/jmsConnectionTargets.jsf -->
<!initPage
    setResourceBundle(key="i18njms" bundle="org.glassfish.jms.admingui.Strings");
    setResourceBundle(key="helpjms" bundle="org.glassfish.jms.admingui.Helplinks")
/>
<sun:page id="page1" >
    <!beforeCreate
        setSessionAttribute(key="resEditTabs" value="targetTab");
        setPageSessionAttribute(key="generalPage" value="jmsConnectionEdit.jsf");
        setPageSessionAttribute(key="targetPage" value="jmsConnectionTargets.jsf");
        getRequestValue(key="name" value=>$page{jndiName});
        setPageSessionAttribute(key="resourceType" value="connectorResource");
        setPageSessionAttribute(key="pageTitle" value="$resource{i18n.connectionFactory.targetPageTitle}");
        setPageSessionAttribute(key="pageTitleHelp" value="$resource{i18n.resource.targetPageTitleHelp}");
    />
    <sun:html id="html2">
        <sun:head id="propertyhead" title="#{pageTitle}" >
            <sun:script url="/resource/common/js/restart.js" />
        </sun:head>
        <sun:body id="body3">
            <sun:form id="propertyForm">
  //#include "resourceNode/resourcesTabs.inc"
#include "/common/shared/alertMsg_1.inc"                <!-- Page Title -->
                 <sun:title id="propertyContentPage" title="#{pageTitle}" helpText="#{pageTitleHelp}"/>
                 "<br />
#include "resourceNode/resourcesTargetTable.inc"
                <sun:hidden id="helpKey" value="$resource{helpjms.jmsConnectionTargets}" />
            </sun:form>
        </sun:body>
#include "/common/shared/changeButtonsJS.inc"
  </sun:html>

</sun:page>
