从我之前的问题开始: 我试图将文本输入的句柄设置为包含在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函数。知道为什么这段代码无效吗?
答案 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>
注意我如何在对话框中部分刷新面板。