XPages - 在对话框中获取textarea的值 - 第2部分

时间:2014-02-17 10:40:43

标签: xpages xpages-extlib xpages-ssjs

从我之前的问题开始: 我试图将文本输入的句柄设置为包含在xe:对话框中的textarea中,但是没有成功。按下XPage上的按钮后,xe:对话框“弹出”。这是我的代码:

<xe:dialog id="InputDialog5">
<xe:this.title>Input Dialog</xe:this.title>
<xp:panel>
<xp:inputTextarea id="InputTextBox5" value="#{document1.InputTextBox5}" 
cols="60" rows="4" styleClass="StatusDialogLabel"></xp:inputTextarea>
</xp:panel>
<xe:dialogButtonBar id="dialogButtonBar15">
<xp:button value="OK" id="button37">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete" immediate="true">
<xp:this.action>
<![CDATA[#{javascript:var inputVal = document1.getValue("InputTextBox5");
setJobReferenceStatus(40,inputVal);
var redirect = "window.location='"+applicationScope.get("redirect")+"'";
facesContext.getViewRoot().postScript(redirect);
}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xe:dialogButtonBar>
</xe:dialog>

不幸的是行document1.getValue(“InputTextBox5”);不起作用,并将“null”而不是字段中包含的值传递给setJobReferenceStatus函数。知道为什么这段代码无效吗?

2 个答案:

答案 0 :(得分:2)

immediate="true"删除eventHandler

每个事件都支持绕过验证的两个选项(请参阅this answer更多详细信息)。请注意,在Per的答案中,eventHandler包含属性分配disableValidators="true"。这将映射到“未经验证的流程数据”选项,而immediate="true"映射到“不验证或更新数据”选项。

当使用后一个选项时,事件运行时不会对数据模型(即文档)进行任何更新,这就是编辑框的值为null的原因,即使用户已填充了值。如果将immediate="true"替换为disableValidators="true",您的事件仍会在不触发任何验证失败的情况下运行,但数据模型将包含用户在编辑框中填充的任何值。

答案 1 :(得分:1)

这是一个使用SSJS读取textarea字段内容的工作示例(并将值输出到计算字段以进行测试):

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xp:this.data>
        <xp:dominoDocument var="document1"></xp:dominoDocument>
    </xp:this.data>

    <xp:button value="Label" id="button1">
        <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript:getComponent("InputDialog5").show()}]]></xp:this.action>
        </xp:eventHandler>
    </xp:button>

    <xe:dialog id="InputDialog5">
        <xe:this.title>Input Dialog</xe:this.title>
        <xp:panel id="refreshPanel">
            <xp:inputTextarea id="InputTextBox5" value="#{document1.InputTextBox5}" cols="60" rows="4" styleClass="StatusDialogLabel"></xp:inputTextarea>
            <xp:br />
            <xp:br />
            <xp:text escape="true" id="computedField1"></xp:text>
        </xp:panel>
        <xe:dialogButtonBar id="dialogButtonBar15">
            <xp:button value="OK" id="button37">
                <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="refreshPanel" disableValidators="true">
                    <xp:this.action><![CDATA[#{javascript:
                            getComponent("computedField1").setValue(document1.getValue("InputTextBox5"));
                        }]]></xp:this.action>
                </xp:eventHandler>
            </xp:button>
        </xe:dialogButtonBar>
    </xe:dialog>
</xp:view>

注意我如何在对话框中部分刷新面板。