Jsf 如何从ICEfaces模式弹出窗口调用托管bean?

Jsf 如何从ICEfaces模式弹出窗口调用托管bean?,jsf,action,icefaces,popuppanel,Jsf,Action,Icefaces,Popuppanel,我正在使用EclipseLunaEE、TomcatV7.0和IceFaces3.2 我有一个标签打印表单,用户可以输入项目编号、项目名称和标签类型等信息。然后用户提交表单。这将以ZPL字符串的形式将信息发送到标签打印机,然后打印机打印出项目的正确标签。这一切都没问题 如果数值较高(生产中超过100),则表单将对照打印数量进行检查。如果打印量超过某个值(>2。纯粹出于测试目的),则“testFlag”布尔值设置为true,显示模式框,并设置错误标志,以便不执行打印命令 模式框会询问用户输入的数量是

我正在使用EclipseLunaEE、TomcatV7.0和IceFaces3.2

我有一个标签打印表单,用户可以输入项目编号、项目名称和标签类型等信息。然后用户提交表单。这将以ZPL字符串的形式将信息发送到标签打印机,然后打印机打印出项目的正确标签。这一切都没问题

如果数值较高(生产中超过100),则表单将对照打印数量进行检查。如果打印量超过某个值(>2。纯粹出于测试目的),则“testFlag”布尔值设置为true,显示模式框,并设置错误标志,以便不执行打印命令

模式框会询问用户输入的数量是否正确,并显示“是/否”按钮

printUI和模式弹出窗口位于同一
元素内,如果testFlag设置为true,则弹出框呈现并可见

问题: 当我单击模式框中的“是”按钮时,它不会执行我分配给它的操作(
System.out.println(“是按钮”)
)。模态框关闭,什么也没有发生

然后我可以重新提交表单,模式框再次出现,然后我单击“是”,什么也没有发生

如果我将数量更改为2并提交,那么它执行打印命令没有问题

我猜这是会话处理方式的问题

问题: 如何获得模式框上的“是”按钮以执行我想要的代码

我试过了: 使用

将模式弹出窗口和表单分别放在
标记中(这会刷新会话并删除所有输入的数据)

使用
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>
<h:inputText id="printQty" value="#{validateBean.printAmount}" size="8" autocomplete="off" 
    maxlength="3" required="true" onblur="submit()" 
    valueChangeListener="#{validateBean.printQtyChange}" />
public void printQtyChange(ValueChangeEvent e) {
    printAmount = e.getNewValue().toString();

    try {
        ls.setPrintQty(Integer.parseInt(printAmount));
    } catch (NumberFormatException eve) {
        errorMessage = true;
        quantityInvalid = true;
        errorFlag = true;
    }

    printQty = ls.getPrintQty();

    System.out.println("Qty : " +printQty);

    if (printQty < 1) {
        errorMessage = true;
        quantityInvalid = true;
        errorFlag = true;
    }
}
<ice:inputText id="printQty" value="#{validateBean.printAmount}" size="8" autocomplete="off"
    maxlength="3" required="true" valueChangeListener="#{validateBean.printQtyChange}"
    partialSubmit="true" />

我找到了另一个选择

我已经删除了模式弹出窗口和任何与之链接的代码

我在表格末尾添加了一个
。仅当打印数量高于我设置的任何数字时,才会呈现此效果

我通过在我的打印量
上使用
onblur=“submit()”

我尝试了
onchange=“submit()”
,但在提交一系列打印作业时遇到了问题。我必须按“回车”键才能强制激活
onchange
属性,这是用户不想要的


的工作原理是暂停表单的提交并等待响应,然后继续或停止提交。它完成了我试图通过模态弹出实现的目标


打印数量输入文本:

<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>
<h:inputText id="printQty" value="#{validateBean.printAmount}" size="8" autocomplete="off" 
    maxlength="3" required="true" onblur="submit()" 
    valueChangeListener="#{validateBean.printQtyChange}" />
public void printQtyChange(ValueChangeEvent e) {
    printAmount = e.getNewValue().toString();

    try {
        ls.setPrintQty(Integer.parseInt(printAmount));
    } catch (NumberFormatException eve) {
        errorMessage = true;
        quantityInvalid = true;
        errorFlag = true;
    }

    printQty = ls.getPrintQty();

    System.out.println("Qty : " +printQty);

    if (printQty < 1) {
        errorMessage = true;
        quantityInvalid = true;
        errorFlag = true;
    }
}
<ice:inputText id="printQty" value="#{validateBean.printAmount}" size="8" autocomplete="off"
    maxlength="3" required="true" valueChangeListener="#{validateBean.printQtyChange}"
    partialSubmit="true" />
这消除了在提交一系列作业时有时仍然存在问题的问题


我没有将
partialsubmit=“true”
放在
上,因为我必须将每个其他输入字段声明为
partialsubmit=“false”
,以防止执行不必要的代码。只在我要检查的输入字段中使用它会更整洁。

我找到了另一种选择

我已经删除了模式弹出窗口和任何与之链接的代码

我在表格末尾添加了一个
。仅当打印数量高于我设置的任何数字时,才会呈现此效果

我通过在我的打印量
上使用
onblur=“submit()”

我尝试了
onchange=“submit()”
,但在提交一系列打印作业时遇到了问题。我必须按“回车”键才能强制激活
onchange
属性,这是用户不想要的


的工作原理是暂停表单的提交并等待响应,然后继续或停止提交。它完成了我试图通过模态弹出实现的目标


打印数量输入文本:

<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>
<h:inputText id="printQty" value="#{validateBean.printAmount}" size="8" autocomplete="off" 
    maxlength="3" required="true" onblur="submit()" 
    valueChangeListener="#{validateBean.printQtyChange}" />
public void printQtyChange(ValueChangeEvent e) {
    printAmount = e.getNewValue().toString();

    try {
        ls.setPrintQty(Integer.parseInt(printAmount));
    } catch (NumberFormatException eve) {
        errorMessage = true;
        quantityInvalid = true;
        errorFlag = true;
    }

    printQty = ls.getPrintQty();

    System.out.println("Qty : " +printQty);

    if (printQty < 1) {
        errorMessage = true;
        quantityInvalid = true;
        errorFlag = true;
    }
}
<ice:inputText id="printQty" value="#{validateBean.printAmount}" size="8" autocomplete="off"
    maxlength="3" required="true" valueChangeListener="#{validateBean.printQtyChange}"
    partialSubmit="true" />
这消除了在提交一系列作业时有时仍然存在问题的问题


我没有将
partialsubmit=“true”
放在
上,因为我必须将每个其他输入字段声明为
partialsubmit=“false”
,以防止执行不必要的代码。只在我要检查的输入字段中使用它会更整洁。

我想我已经想出了一个解决方案。现在正在进行测试。我已经删除了模式弹出窗口,并在数量输入字段中引入了“valueChangeListener”。然后,我添加了一个面板确认,如果数量高于设定值,则会呈现该面板确认。我想我已经找到了一个修复方法。现在正在进行测试。我已经删除了模式弹出窗口,并在数量输入字段中引入了“valueChangeListener”。然后,我添加了一个面板确认,如果数量高于设定值,则会呈现该面板确认。