如何在特立尼达使用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>
答案 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标签。