回答
您可以在編輯框的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