我有一个按钮,可以搜索数据库中的字段,并将字段的结果放在viewScope变量中。 然后我使用重复控件来显示变量。根据我能够辨别的情况,我将重复控件的数据源设置为viewscope变量,并使用计算字段通过获取重复控件的值来使用" rowIndex"来访问变量。属性,因为返回值是多个值 我的问题是: 我可以使用此方法在记录中显示多个字段吗?如果是这样,怎么样? 这是我的代码:
<?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:button id="button1" value="Create a Search">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:searchFormula = '@Begins(Stu_LastName; "Se")';
var dc:NotesDocumentCollection = database.search(searchFormula);
var docItems = [];
viewScope.Firstname = [];
var i = 0;
var doc = dc.getFirstDocument();
var tmpDoc:NotesDocument;
while (doc != null) {
docItems = doc.getItems();
if (doc.hasItem("stu_status")) {
var status = [];
status = doc.getItemValue("stu_status");
if (status[0] == "1")
if (doc.hasItem("Stu_Firstname")) {
item = doc.getItemValue("Stu_Firstname");
viewScope.Firstname.push(item);
i++
}
tmpDoc = dc.getNextDocument(doc);
doc.recycle();
doc = tmpDoc;
if (i > 50000) {
print("possible loop - breaking now");
break;
}
}
}
var text = "The length of Firstname is " + viewScope.Firstname.length;
print(text);}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:br></xp:br>
<xp:pager layout="Previous Group Next" partialRefresh="true"
id="pager1" for="repeat1">
</xp:pager>
<xp:repeat id="repeat1" rows="30" value="#{viewScope.Firstname}"
var="rowData" indexVar="rowIndex">
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{javascript:getComponent("repeat1").getValue()[rowIndex]}]]></xp:this.value>
</xp:text>
<xp:br></xp:br>
</xp:repeat>
</xp:view>
答案 0 :(得分:1)
你太难了!只需在计算文本字段中使用rowData即可。这是repeat(您的viewScope变量)中引用值中每个项的值。索引是数字索引,从零开始。
<xp:text escape="true" id="computedField1" value="#{rowData}">
</xp:text>
答案 1 :(得分:0)
我认为你的意思是你想要获得更多的数据而不仅仅是FirstName来尝试建立一个数据表?例如FirstName,LastName,电子邮件等。
如果是这样,您最好构建搜索以返回NotesDocumentCollection
中的数据,而不是获取集合并将数据提取到viewScope
数组中。例如searchFormula = '@Begins(Stu_LastName; "Se") & @Contains(Stu_Status; "1")';
每个rowData
条目都是一个文档。然后,您可以将字段称为#{rowData.FirstName}' or
#{rowData.LastName}&#39;在重复中的计算字段中。
答案 2 :(得分:0)
决定提交一个例子以防任何人需要一个例子。从网站下载数据并创建一个包含3个字段的数据库:State AirportName AirportCode。搜索搜索状态并返回其余信息。添加代码作为答案,因为注释不允许代码所需的字符数。
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:panel style="margin-left:10.0px;background-color:rgb(204,230,255);padding-top:20.0px;padding-bottom:5.0px" id="Search3Panel">
<xp:table>
<xp:tr>
<xp:td colspan="2">
<xp:label value="This Panel Shows a Repeat Control Using a notesDataCollection as a datasource." id="label5" style="font-weight:bold"></xp:label></xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:label id="label1" value="State"></xp:label></xp:td>
<xp:td>
<xp:inputText id="searchTerm"></xp:inputText></xp:td>
</xp:tr>
<xp:tr>
<xp:td></xp:td>
<xp:td>
<xp:button id="button1" value="Search">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete" id="eventHandler1">
<xp:this.action><![CDATA[#{javascript:var searchTerm:com.ibm.xsp.component.xp.XspInputText = getComponent("searchTerm").getValue();
viewScope.State = searchTerm;
viewScope.searchFormula = '@Begins(State; "'+ searchTerm + '")'
sessionScope.panelSee = false;}]]></xp:this.action>
<xp:this.script>
<xp:executeClientScript>
<xp:this.script><![CDATA[var ret = true;
for(var i=0; i<document.forms[0].elements.length; i++){
if(document.forms[0].elements[i].name == "#{id:searchTerm}" ){
var choice = document.forms[0].elements[i].value;
if (!choice) {
alert("Please enter letters at the beginning of the state you want to search for.");
return false
}
}
}]]></xp:this.script>
</xp:executeClientScript>
</xp:this.script>
</xp:eventHandler>
</xp:button>
<xp:button id="button4" value="Clear">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete" id="eventHandler2">
<xp:this.action><![CDATA[#{javascript:viewScope.State = "";
viewScope.searchFormula = "";
sessionScope.panelSee = true;}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:td>
</xp:tr>
</xp:table>
</xp:panel><xp:panel style="margin-left:10.0px;background-color:rgb(204,230,255);padding-top:10.0px;padding-bottom:10.0px" id="Repeat3Panel">
<xp:label id="label4" value="You are searching for States that begin with " style="font-weight:bold"><xp:this.rendered><![CDATA[#{javascript:if (!!viewScope.State) {
return true;
} else {
return false;
}}]]></xp:this.rendered></xp:label><xp:text escape="true" id="computedField8" value="#{viewScope.State}" style="font-weight:bold"></xp:text>
<xp:br></xp:br>
<xp:repeat id="repeat3" rows="30" var="APCodes">
<xp:this.value><![CDATA[#{javascript:var dc:NotesDocumentCollection = database.search(viewScope.searchFormula);
return dc}]]></xp:this.value>
<xp:text escape="true" id="computedField5" value="#{APCodes.State}">
</xp:text>
  
<xp:text escape="true" id="computedField6" value="#{APCodes.Airport}">
</xp:text>
  
<xp:text escape="true" id="computedField7" value="#{APCodes.Code}">
</xp:text><xp:br></xp:br></xp:repeat>
</xp:panel></xp:view>