我正在使用 Eclipse Luna EE、Tomcat v7.0 和 ICEFaces 3.2
我有一个用于标签打印的表单,用户输入诸如项目编号、项目名称和标签类型等信息。然后用户提交表单。这会将信息以 ZPL 字符串形式发送到标签打印机,然后打印机打印出该项目的正确标签。这一切都没有问题。
如果值高(生产中超过 100 个),该表格会检查打印数量。如果打印数量超过某个值(> 2。纯粹出于测试目的),则“testFlag”布尔值设置为 true,显示模式框并设置错误标志,以便不执行打印命令。
模态框询问用户是否输入了正确的数量,并提供了是/否按钮。
printUI 和模态弹出框位于同一<ice:form>
元素内,如果 testFlag 设置为 true,则弹出框呈现并可见。
问题:
当我单击模式框中的“是”按钮时,它没有执行我分配给它的操作(System.out.println("Yes Button!")
)。模态框关闭,没有任何反应。
然后我可以重新提交表单,模式框再次出现,然后我单击“是”,没有任何反应。
如果我将数量更改为2并提交,那么它执行打印命令没有问题。
我猜这是会话处理方式的问题。
问题: 如何在模态框中获得“是”按钮来执行我想要的代码?
我试过:
使用<ice:commandLink>
, <h:button>
, <h:commandButton>
,<h:commandLink>
将模式弹出窗口和表单放在单独的<ice:form>
标签中(这刷新了会话并删除了所有输入的数据)。
使用actionListener
包含表单的代码:
<h:body>
<div id="surround">
<ice:form id="test" prependId="false">
<ui:include src="./printUI.xhtml" />
<ui:include src="./printQtyPopup.xhtml" />
</ice:form>
</div>
</h:body>
printQtyPopup.xhtml
<ui:composition>
<ice:panelPopup modal="true" visible="#{validateBean.testFlag}" rendered="#{validateBean.testFlag}">
<f:facet name="header">
<ice:outputText value="Print Quantity Check" />
</f:facet>
<f:facet name="body">
<ice:panelGrid>
<ice:outputText value="You selected a print quantity of: #{validateBean.printAmount}" />
<ice:outputText value="Is this correct?" />
<ice:panelGroup>
<ice:commandButton value="No" />
<ice:commandButton value="Yes" action="#{validateBean.checkQtyYes}" />
</ice:panelGroup>
</ice:panelGrid>
</f:facet>
</ice:panelPopup>
</ui:composition>
相关ValidateBean.java代码
public void validate() { //validation checks are carried out when the user clicks "Print" on the printUI.
if (!errorFlag && checkQty && printQty > 2) {
testFlag = true;
errorFlag = true;
System.out.println("Qty Check Modal");
}
if (!errorFlag) {
if (printQty > 0) {
initialiseString();
initialisePrinter();
clear();
} else {
printQty = 0;
errorMessage = true;
quantityInvalid = true;
errorFlag = true;
}
}
}
public void checkQtyYes() {
System.out.println("Yes Button!");
}