回答
您可以在编辑框的onchange事件中设置sessionScope变量(或任何范围变量),然后在SSJS中引用sessionScope变量。以下是一些示例代码,最下面的部分仅显示了页面上的sessionScope变量。
<?xml version="1.0" encoding="UTF-8"?>
<xp:repeat id="repeat1" rows="30" value="#{javascript:5}"
indexVar="rptIndex">
<xp:inputText id="inputText1">
<xp:eventHandler event="onchange" submit="true" refreshMode="complete">
<xp:this.action>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:sessionScope['text'+rptIndex] = getComponent("inputText1").getValue()}]]></xp:this.script>
</xp:executeScript>
</xp:this.action></xp:eventHandler></xp:inputText>
</xp:repeat>
<xp:table styleClass="debug">
<xp:tr>
<th>Variable Name</th>
<th>Variable Content</th>
</xp:tr>
<xp:repeat id="varRepeat" rows="30" value="#{javascript:sessionScope.keySet();}" var="scopeData">
<xp:tr>
<xp:td>
<xp:text escape="true" id="varName" value="#{javascript:scopeData}" />
</xp:td>
<xp:td>
<xp:text escape="true" id="varValue" value="#{javascript:sessionScope.get(scopeData)}" />
</xp:td>
</xp:tr>
</xp:repeat>
</xp:table>
</xp:view>
当您添加提交给你创造一个相当繁琐的应用程序的onChange事件 - 可能会咬你。设定焦点的解决方案颇为不同。首先:焦点是客户端操作,所以您需要一个客户端脚本,它能够“知道哪个控件是第一个失败。好消息是:XPages添加到服务器端验证属性aria-invalid = true时失败的所有字段。 因此,您可以使用查询该脚本的dojo.onLoad脚本,并将焦点设置为结果的第一个成员。另请参见http://dontpanic82.blogspot.com/2011/07/xpages-styling-invalid-field.html 而对于查询语法: http://dojotoolkit.org/reference-guide/1.7/dojo/query.html
重复是很有趣的事情,至少可以说。如果您查看团队室模板mobileThread自定义控件中的示例,您会看到重复显示回复列表,您还会注意到很多JavaScript都会与之配合使用,例如,一个按钮单击时运行脚本会运行在重复中的所有按钮上。
如果您正在寻找验证问题,stwissel的解决方案看起来是最好的。如果这是别的东西,在某些时候,你只需要任意给定的编辑框中的值,也许你应该考虑是这样的:
var domEl = dojo.byId(' <repeatControlId> ');
var textBoxes = domEl.getElementsByTagName("input");
var certainValue = textBoxes[3].value;
现在certainValue包含给定的编辑框的值。
还没有尝试过这一点,可能需要一点调整,但一般的想法应该工作,我会想。
这看起来很有希望。但这似乎是客户端?我需要服务器端。这是在模板中找到的代码还是你想出的东西?我似乎无法得到它的工作。我认为这行var certainValue = textBoxes [3] .value;导致'未定义'为空或不是对象。我的重复控件有一个repeat1的id,所以我有var domEl = dojo.byId('repeat1'); – 2012-04-05 12:53:48
不,这是客户端,我的想法是可以在客户端运行并传递到服务器。我不知道你的用例,但隐藏的输入框,executeOnServer()函数,jsonRpcService控制这些行的东西也许。不,这是我现场编造的东西,是的,您的问题是,dojo.byId是客户端功能,重复的客户端ID不是'repeat1',例如。视图:panel_34:repeat1。所以使用dojo.byId('#{id:repeat1}');获取完整的客户端ID – 2012-04-05 13:30:19
谢谢!好吧,我更接近,但我得到了未定义的警报(“价值1 =”+ textBoxes [1]);警告框显示值1 =未定义。对不起,这样的新人。 :) – 2012-04-05 13:43:39
添加了另一条评论,所以我可以添加代码。
做了一个快速测试,对我来说工作正常,请参阅下面的示例。希望能帮助到你。尝试添加一些打印输出,看看它是否得到了每一点。
<xp:repeat id="TestRepeat" rows="100" var="rowData"
indexVar="commentIndex" first="0" rendered="true">
<xp:this.value><![CDATA[#{javascript:
var dataArray = new Array();
dataArray.push(" Test");
dataArray.push(" Test");
dataArray.push(" Test");
dataArray.push(" Test");
dataArray.push(" Test");
return dataArray;
}]]></xp:this.value>
<xp:panel>
<xp:label value="Test"></xp:label>
<xp:inputText id="inputText1" value="Test" defaultValue="Test">
</xp:inputText>
<xp:br></xp:br>
</xp:panel>
</xp:repeat>
<xp:button value="Test" id="button1">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script>
<xp:executeClientScript>
<xp:this.script><![CDATA[
var domEl = dojo.byId('#{id:TestRepeat}');
var textBoxes = domEl.getElementsByTagName("input");
alert("Value 1: " + textBoxes[0].value);
]]></xp:this.script>
</xp:executeClientScript>
</xp:this.script>
</xp:eventHandler>
</xp:button>
也适用于我。不知道我做错了什么。你甚至不需要声明该数组。简单的返回4;工作得很好。谢谢您的帮助。 – 2012-04-05 16:59:15
没有概率,我会在可以的时候寻找问题,这样如果有其他事情发生,我会在身边。当我试图回答更多信息时,不要羞于将任何标记作为顶级答案,信誉点看起来不错;-) – 2012-04-05 18:40:11
- 1. 取决于控制M中的第n次重复作业M
- 2. 如何获取第n个最近值?
- 3. 如何获取复制复选框值
- 4. 如何获取控制器MVC中的复选框值
- 5. QTP:如何在检查点属性编辑对话框中获取“复杂值”编辑控件?
- 6. 从重复控制获取值
- 7. 获取n行数的复选框值
- 8. 如何从PHP中的此SimpleXMLObject获取第n个值?
- 9. 编辑列表中每个第N个项目的值
- 10. 第n个孩子重复
- 11. 如何在对话框中获取Mvc控制器的值?
- 12. 在我的控制器中获取selectlist第一个值
- 13. 如何获得在重复控制
- 14. 获取所有子编辑框的值
- 15. 如何编辑复选框值?
- 16. 在Python中,如何获取列表中的第n个项目的值?
- 17. 如何使用控制台选择N个复选框?
- 18. 如何从可编辑组合框中获取新值?
- 19. 获取onClick函数中第二个参数值的复选框
- 20. 如何在javascript中获取多个复选框的值
- 21. Xpages重复控制获取inputText的ID
- 22. 如何在C++中获取大数的第n个根?
- 23. MFC控制嵌套对话框中的编辑框获取断言错误
- 24. Excel VBA中复制唯一值重复的第一个值
- 25. 如何获取HTML.ActionLink中一个或多个复选框的值?
- 26. 如何获取django模板循环中第二,第三,第n遍的值?
- 27. 如何从asp.net中的多个复选框中获取值?
- 28. 如何获取JQuery复选框的值?
- 29. 如何获取复选框的值
- 30. 如何忽略控制器重复值
是在一个类似的问题上,在同一个x页面上的多个自定义控件。我真正想要做的就是去控制自己,所以如果验证失败,我可以设置焦点。我认为这应该能够完成,因为你可以在HTML源代码中的每个编辑框中看到一个“索引”编号。关于其他问题的一个想法是使用“动态”ID名称,但我一直无法弄清楚。 – 2012-04-04 21:06:40
我不知道有什么办法来动态设置ID不幸的是..不知道这是可能的。 – 2012-04-05 00:06:55
不要使用会话范围这种事情。请使用正确的范围。对于重复的编辑框,Viewscope应该是使用的范围。 – jjtbsomhorst 2012-04-05 07:01:12