我正在使用JSP& amp;开发一个Web应用程序。 Servlet(IDE:Eclipse,数据库:Oracle10)。 我正在使用jqGrid以表格格式显示记录。
我想从servlet中获取jqGrid
中的组合框的值,到目前为止我已经完成了以下操作。
我在JSP scriplet中访问Servlet传递的数组。
<%
String[] stageIDs = (String[])request.getAttribute("combo");
%>
以下是我的colModel:
jQuery("#list10_d").jqGrid({
height: "100%",
url:'ProtocolJGridServChild?q=2&action=protAction',
datatype: "xml",
colNames:['Sr. No.','PID', 'SID'],
colModel:[{name:'srNo',index:'srNo', width:35,sortable:true},
{name:'PID',index:'PID', width:100,sortable:false,editable:true,hidden:true},
{name:'SID',index:'SID', width:100, sortable:false, editable:true, edittype:"select",editoptions:{value:<%for(int i=0;i<stageIDs.length;i++)%><%="ID:"+ stageIDs[i]+";"%>}}
],
rowNum:2,
rowList:[2,4,6],
pager: '#pager10_d',
sortname: 'PID',
viewrecords: true,
sortorder: "asc",
multiselect: true,
editurl: "MyServletName",
caption:"CRM_PROT_ACTIONS",
}).navGrid('#pager10_d',{edit:true,add:true,del:true});
但我在for loop line
中收到异常,我将编辑选项分配给组合框。请告诉我代码中是否有任何错误。
我的另一个问题是,有没有更好的方法从servlet为jqGrid中的组合框分配值(不使用scriplet)?
答案 0 :(得分:1)
您应该在editoptions内使用dataUrl
代替value
来获取服务器上的组合框的值。如果服务器返回JSON数据而不是HTML片段,则可以使用buildSelect
将服务器响应从dataUrl
转换为jqGrid所需的格式。确切的实现可能取决于您使用的jqGrid的版本。您可以使用ajaxSelectOptions
将相应Ajax请求的type
或dataType
从默认“html”更改为"json"
(请参阅here)。请参阅here buildSelect
实施的示例。
答案 1 :(得分:0)
使用动态数据将组合框添加到jqgrid ..
我是按照以下方式完成的。
jQuery("#list10_d").jqGrid({
height: "100%",
url:'ProtocolJGridServChild?q=2&action=protAction',
datatype: "xml",
colNames:['Sr. No.','PID', 'SID'],
colModel:[{name:'srNo',index:'srNo', width:35,sortable:true},
{name:'PID',index:'PID', width:100,sortable:false,editable:true,hidden:true},
{name:'SID',index:'SID', width:100,sortable:false,editable:true,edittype:"select",editoptions: {dataUrl: 'MyServletURL?action=comboSID'}},
],
rowNum:2,
rowList:[2,4,6],
pager: '#pager10_d',
sortname: 'PID',
viewrecords: true,
sortorder: "asc",
multiselect: true,
editurl: "MyServletName",
caption:"CRM_PROT_ACTIONS",
}).navGrid('#pager10_d',{edit:true,add:true,del:true});
<强>的Servlet 强>
if(request.getParameter("action").equalsIgnoreCase("comboSID"))
{
String s[][] = select.getData("select SID from TABLE_NAME_HERE where PID='"+ param +"'"); //returns 2D array
StringBuffer strBuf = new StringBuffer();
strBuf.append("<select>");
for(int i=0;i<s.length;i++)
{
strBuf.append("<option>");
strBuf.append(s[i][0]);
strBuf.append("</option>");
}
strBuf.append("</select>");
out.println(strBuf);
}