Object.wait()
функциональность реализована с помощью JVM_MonitorWait
нативного метода, согласно ThreadReference
javadoc:
/** Thread is waiting - Object.wait() or JVM_MonitorWait() was called */
public final int THREAD_STATUS_WAIT = 4;
Реализация этого метода может быть найдена в jvm.cpp
и использует ObjectSynchronizer::wait
:
JVM_ENTRY(void, JVM_MonitorWait(JNIEnv* env, jobject handle, jlong ms))
JVMWrapper("JVM_MonitorWait");
Handle obj(THREAD, JNIHandles::resolve_non_null(handle));
JavaThreadInObjectWaitState jtiows(thread, ms != 0);
if (JvmtiExport::should_post_monitor_wait()) {
JvmtiExport::post_monitor_wait((JavaThread *)THREAD, (oop)obj(), ms);
// The current thread already owns the monitor and it has not yet
// been added to the wait queue so the current thread cannot be
// made the successor. This means that the JVMTI_EVENT_MONITOR_WAIT
// event handler cannot accidentally consume an unpark() meant for
// the ParkEvent associated with this ObjectMonitor.
}
ObjectSynchronizer::wait(obj, ms, CHECK);
JVM_END
ObjectSynchronizer::wait
реализация находится в synchronizer.cpp
и делегирует ObjectMonitor::wait
в objectMonitor.cpp
[ 1115].
Если вы продолжите копать, вы в конечном итоге достигнете нативной реализации потока Java, которая зависит от платформы. В Linux это будет libpthread.so
, который в конечном итоге будет обрабатывать изменение статуса потока.
Найденный Вашим сообщением, в то время как я пытался сделать это для своего проекта. Я получил его работа. Для любого, кому нужен он в будущем, jqGrid не будет работать из поля с JSON и ASP.NET. Необходимо сделать несколько маленьких модификаций к grid.base.js. Вокруг строки 829, замените json раздел случая следующим:
case "json":
gdata = JSON.stringify(gdata); //ASP.NET expects JSON as a string
$.ajax({ url: ts.p.url,
type: ts.p.mtype,
dataType: "json",
contentType: "application/json; charset=utf-8", //required by ASP.NET
data: gdata,
complete: function(JSON, st) { if (st == "success") { addJSONData(cleanUp(JSON.responseText), ts.grid.bDiv); if (loadComplete) { loadComplete(); } } },
error: function(xhr, st, err) { if (loadError) { loadError(xhr, st, err); } endReq(); },
beforeSend: function(xhr) { if (loadBeforeSend) { loadBeforeSend(xhr); } } });
if (ts.p.loadonce || ts.p.treeGrid) { ts.p.datatype = "local"; }
break;
Затем добавьте следующую функцию:
function cleanUp(responseText) {
var myObject = JSON.parse(responseText); //more secure than eval
return myObject.d; //ASP.NET special
}
Необходимо будет также включать синтаксический анализатор JSON и stringifier. Наряду с работой с ASP.NET, этот пересмотренный код также более безопасен, потому что оператора оценки не стало.
Править: Я должен был также отметить, что Вам, возможно, придется сделать подобные редактирования к grid.celledit.js, grid.formedit.js, grid.inlinedit.js, и grid.subgrid.js.
Я имею просто jTemplates для того, чтобы сделать клиентскую подкачку страниц с jQuery и ASP.NET. Я сделал сообщение в блоге на нем, которое можно найти здесь: http://www.aaron-powell.com/blog.aspx?id=1209
Это смотрит на то, как создать шаблонное местоположение данных, возвратите данные из ASP.NET и затем реализуйте решение для подкачки страниц.
Можно использовать ASP.Net MVC JsonResult для заполнения сетки.
Класс человека
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime Birthday { get; set; }
public static IEnumerable<Person> GetABunchOfPeople()
{
// Get a bunch of People.
}
}
В Вашем контроллере Вы имели бы:
public JsonResult GetABunchOfPeopleAsJson()
{
var rows = (Person.GetABunchOfPeople()
.Select(c => new
{
id = c.ID,
cell = new[]
{
c.ID.ToString(),
c.Name,
c.Birthday.ToShortDateString()
}
})).ToArray();
return new JsonResult
{
Data = new
{
page = 1,
records = rows.Length,
rows,
total = 1
}
};
}
И jqGrid конфигурация для URL была бы:
url: '<%= ResolveUrl("~/Person/GetAllPeople") %>',
Я просто колеблюсь, пытаясь сплотить все. Мое первое беспокойство просто генерирует корректный ответ JSON. Мой возвращенный класс, кажется, сериализируется как свойство, названное 'd' - действительно ли это - вещь JQuery или веб-конвенция метода ASP.NET? Я боюсь, что jqGrid будет искать данные, чтобы быть верхним уровнем, тогда как asp.net поместит его в свойство, названное 'd':
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static object GetData() {
TestClass tc = new TestClass() { One = "Hello", Two = "World" };
return tc;
}
$("#divResults").click(function() {
$.ajax({
type: "POST",
url: "GridData_bak.aspx/GetData",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(test) {
// Replace the div's content with the page method's return.
$("#divResults").text(test.d.One);
},
error: function(msg) {
$("#divResults").text(msg);
}
});
});
d в json является встроенной защитой против потенциального использования
пример я нашел что использование mvc
Полная информация здесь
flexgrid плагин довольно редок на doumentation однако в маленьком разделе на демонстрационной странице существует работа при создании json сериализованного объекта, это является немного вводящим в заблуждение, потому что сетка требует определенного формата, я портировал код php для xml опции с небольшой смазкой обезьяны, можно сделать то же для форматирования json
вот мой xml порт
the setup for the grid
$("#tableToFlex").flexigrid({
url: 'WebService.asmx/getData'}
... *other configs* ...);
рассмотрите следующий код в webservice.asmx классе
<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Xml)> _
Public Function getData(ByVal page As Integer, _
ByVal qtype As String, _
ByVal Query As String, _
ByVal rp As Integer, _
ByVal sortname As String, _
ByVal sortorder As String) As System.Xml.XmlDocument
'note these parameters are inputted to determine paging and constrains for the resultant rows
'Sample list to send to the grid
Dim list = New List(Of ApplicationStateInformation)
'Sample row object that holds name , surname , address, idnumber ...
list.Add(New RowObjects( "test1", "test1", "test1", "12345"))
list.Add(New RowObjects( "test2", "test2", "test2", "12345"))
list.Add(New RowObjects( "test3", "test3", "test3", "12345"))
list.Add(New RowObjects( "test4", "test4", "test4", "12345"))
'retun a xml doc, as we are using the xml format on the flexgrid
Dim returnDoc = New System.Xml.XmlDocument()
returnDoc.Load(New IO.StringReader(ToXmlResult(list)))
Return returnDoc
End Function
Private Function ToXmlResult(ByVal list As List(Of RowObjects)) As String
'this is the xml document format the grid understands
Dim result As String = "<?xml version=""1.0"" encoding=""utf-8""?>" & vbCrLf
result += "<rows>" & vbCrLf
result += String.Format("<page>{0}</page>" & vbCrLf, "1")
result += String.Format("<total>{0}</total>" & vbCrLf, "10")
For Each item In list
result += ConvertRowData(item)
Next
result += "</rows>" & vbCrLf
Return result
End Function
Private Function ConvertRowData(ByVal row As RowObjects) As String
Dim result As String = String.Format("<row id='{0}'>" & vbCrLf, row.IdNumber.ToString)
'THESE SHOULD BE HTML ENCODED (the format arg) but I left it out
result += String.Format("<cell><![CDATA[{0}]]></cell>" & vbCrLf, row.Name)
result += String.Format("<cell><![CDATA[{0}]]></cell>" & vbCrLf, row.Surname)
result += String.Format("<cell><![CDATA[{0}]]></cell>" & vbCrLf, row.IdNumber)
result += "</row>" & vbCrLf
Return result
End Function
Я думаю, что можно заставить jqgrid работать с json и asp.net, не изменяя grid.base.js и другими jqgrid файлами, необходимо использовать свойство типа данных, чтобы определить собственный вызов ajax и определить json читателя, jqgrid будет затем использовать пользовательский вызов ajax и читателя каждый раз перезагрузки сетки.
Процесс подобен для xml, Вы просто определяете xmlreader вместо jsonreader.
Все свойства jsonreader определяются в онлайн-документации
Поскольку примеры пользовательского типа данных рассматривают "Функцию как тип данных" на живой демонстрационной странице под "Новым в 3,3"
Моя реализация:
данные: "{'Страница''": + gdata.page +"' ', строки''": + gdata.rows +"', 'sidx''": + gdata.sidx +"', 'sord''": + gdata.sord +"', 'без обозначения даты''": + gdata.nd +"'', _search''": + gdata. _ ищут +"', 'searchField''": + ts.p.searchdata.searchField +"', 'searchString''": + ts.p.searchdata.searchString +"', 'searchOper''": + ts.p.searchdata.searchOper + "'}",
успех: функция (JSON, Св.) {если (Св. == "успех") {addJSONData (JSON.d, ts.grid.bDiv); если (loadComplete) {loadComplete (); }}
Insted с помощью полного ajax события используют событие успеха. этот путь, предотвращают двойной json seralize.
Всего одна вещь, которую я не понял с редактированием ячейки: Предположите, что я хочу, редактируют несколько ячеек с совпадающим типом данных (интервал). У меня есть только один веб-метод! и я не могу oveload с совпадающим типом данных с другим именем! Кто-либо, решают этот вид probleme?