我正在尝试将文本输入的句柄设置到包含在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);”未执行,对话框保持“冻结”状态。关于如何解决这个问题的任何想法?
答案 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,以便客户端脚本代码可以找到它。
没看其余的代码,所以我无法判断是否存在更多潜在问题