如何在特立尼达使用commandButton获取弹出窗口?

时间:2010-03-09 13:53:33

标签: jsf popup trinidad

如何在特立尼达使用commandButton获取弹出窗口?

我的问题是,点击Add中的dialogdemo.jspx按钮,不会打开任何弹出窗口或对话框。

这是dialogdemo.jspx档案:

<jsp:root 
    xmlns:jsp="http://java.sun.com/JSP/Page" 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:tr="http://myfaces.apache.org/trinidad" 
    version="1.2">
    <jsp:directive.page contentType="text/html;charset=utf-8" />
    <f:view>
        <tr:document title="Dialog Demo">
            <tr:form>
                <!--
                    The field for the value; we point partialTriggers at the 
                    button to ensure it gets redrawn when we return
                -->
                <tr:inputText label="Pick a number:" partialTriggers="buttonId"
                    value="#{launchDialog.input}" />
                <!--
                    The button for launching the dialog: we've also configured 
                    the width and height of that window
                -->
                <tr:commandButton text="Add" action="dialog:chooseInteger" 
                    id="buttonId" windowWidth="300" windowHeight="200" 
                    partialSubmit="true" useWindow="true"
                    returnListener="#{launchDialog.returned}" />
            </tr:form>
        </tr:document>
    </f:view>
</jsp:root>

以下是关联的托管bean LaunchDialogBean.java

package jsfpkg;

import org.apache.myfaces.trinidad.component.UIXInput;
import org.apache.myfaces.trinidad.event.ReturnEvent;

public class LaunchDialogBean {
    private UIXInput _input;

    public UIXInput getInput() {
        return _input;
    }

    public void setInput(UIXInput input) {
        _input = input;
    }

    public void returned(ReturnEvent event) {
        if (event.getReturnValue() != null) {
            getInput().setSubmittedValue(null);
            getInput().setValue(event.getReturnValue());
        }
    }

}

这是弹出文件Popup.jspx

<jsp:root 
    xmlns:jsp="http://java.sun.com/JSP/Page" 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:trh="http://myfaces.apache.org/trinidad/html"
    xmlns:tr="http://myfaces.apache.org/trinidad"
    version="2.0">
    <jsp:directive.page contentType="text/html;charset=utf-8" />
    <f:view>
        <tr:document title="Add dialog">
            <tr:form>
                <!-- Two input fields -->
                <tr:panelForm>
                    <tr:inputText label="Number 1:" value="#{chooseInteger.value1}"
                        required="true" />
                    <tr:inputText label="Number 2:" value="#{chooseInteger.value2}"
                        required="true" />
                </tr:panelForm>

                <!-- Two buttons -->
                <tr:panelGroup layout="horizontal">
                    <tr:commandButton text="Submit" action="#{chooseInteger.select}" />
                    <tr:commandButton text="Cancel" immediate="true"
                        action="#{chooseInteger.cancel}" />
                </tr:panelGroup>
            </tr:form>
        </tr:document>
    </f:view>
</jsp:root>

为此我写了bean ChooseIntegerBean.java

package jsfpkg;

import org.apache.myfaces.trinidad.context.RequestContext;

public class ChooseIntegerBean {

    private Integer _value1;
    private Integer _value2;

    public Integer getValue1() {
        return _value1;
    }

    public void setValue1(Integer value1) {
        _value1 = value1;
    }

    public Integer getValue2() {
        return _value2;
    }

    public void setValue2(Integer value2) {
        _value2 = value2;
    }

    public String cancel() {
        RequestContext.getCurrentInstance().returnFromDialog(null, null);
        return null;
    }

    public String select() {
        Integer value = new Integer(getValue1().intValue() + getValue2().intValue());
        RequestContext.getCurrentInstance().returnFromDialog(value, null);
        return null;
    }

}

这是我的faces-config.xml

<managed-bean>
    <managed-bean-name>chooseInteger</managed-bean-name>
    <managed-bean-class>jsfpkg.ChooseIntegerBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<managed-bean>
    <managed-bean-name>launchDialog</managed-bean-name>
    <managed-bean-class>jsfpkg.LaunchDialogBean</managed-bean-class>
    <managed-bean-scope>
        request
    </managed-bean-scope>
</managed-bean>

<navigation-rule>
    <from-view-id>/dialogdemo.jspx</from-view-id>
    <navigation-case>
        <from-outcome>dialog:chooseInteger</from-outcome>
        <to-view-id>/dialogbox.jspx</to-view-id>
    </navigation-case>
</navigation-rule>

2 个答案:

答案 0 :(得分:2)

我认为你的commandButton的行为是错误的:

<tr:commandButton text="Submit" action="#{chooseIntegerBean.select}" windowWidth="300" windowHeight="200"                
                partialSubmit="true" useWindow="true" /> 

并在您的ChooseIntegerBean中:

public String select()
{
     //other things             
     return "dialog:chooseInteger";
}

并在web.xml中:

<context-param><param-name>org.apache.myfaces.trinidad.ENABLE_LIGHTWEIGHT_DIALOGS</param-name><param-value>true</param-value></context-param>

答案 1 :(得分:-1)

首先尝试从配置文件中删除/dialogdemo.jspx。第二次只需删除文件名前面的/ in标签。