XPages - 在对话框中获取textarea的值

时间:2014-02-14 09:52:45

标签: javascript dojo xpages lotus-notes 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"></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 request = facesContext.getExternalContext().getRequest();
var header = request.getHeader("Cookie");
var inputVal = @Middle(header,"InputTextBox5=",";")

setJobReferenceStatus(40,inputVal);
var redirect = "window.location='"+applicationScope.get("redirect")+"'";
facesContext.getViewRoot().postScript(redirect);}]]></xp:this.action>
<xp:this.script><![CDATA[
var inputvalue = document.getElementById("InputTextBox5").value;
alert("inputvalue = " + inputvalue);
dojo.cookie("InputTextBox5", inputvalue, { expires: 1 });
]]></xp:this.script>
</xp:eventHandler>
</xp:button>
</xe:dialogButtonBar>
</xe:dialog>

我的想法是获取textarea的值,将其添加到dojo cookie,使用SSJS检索cookie值,然后将值传递给SSJS函数。但是,代码在获取textarea值的阶段已经失败。行“alert(”inputvalue =“+ inputvalue);”未执行,对话框保持“冻结”状态。关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:2)

为了从客户端Javascript获取文本字段的句柄,您必须知道XPages生成的客户端ID。所以这样做是为了计算CSJS中的id:

<xp:this.script><![CDATA[
  var inputvalue = document.getElementById("#{id:InputTextBox5}").value;
  alert("inputvalue = " + inputvalue);
  dojo.cookie("InputTextBox5", inputvalue, { expires: 1 });
]]></xp:this.script>

答案 1 :(得分:1)

快看,我已经看到了两个主要障碍:

a)document.getElementById(..)可能不会做(事实上我从未真正尝试过)。我使用XSP.getElementById(..)dojo.byId(..)代替

b)你的textarea在运行时永远不会拥有与设计时相同的id。只需使用浏览器的源代码查看器,您就会明白我的意思。因此,我们必须按照以下方式为我们计算生成的ID:

dojo.byId("#{id:InputTextBox5}")

然后将其转换为客户端对象的最终ID,以便客户端脚本代码可以找到它。

没看其余的代码,所以我无法判断是否存在更多潜在问题