- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 liferay 框架开发应用程序。我有一个下拉框,其值是从数据库中提取的。我想要做的是,每当用户从下拉菜单中选择任何人时,应该从数据库中提取有关该人的信息以供查看。应该怎么做?我应该使用 ajax 还是其他东西?这应该如何完成?我不知道如何开始:
编辑:这就是我从 jsp 进行调用的方式。我不确定这是否正确从 jsp 调用:
<!-- Ajax script to pull Employee data from the database -->
<script>
function showEmployeeInfo(empName)
{
var xmlhttp;
if (str=="")
{
document.getElementById("empDetails").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("empDetails").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getEmp.java?q="+empName,true);
xmlhttp.send();
}
请注意 xmlhttp.open("GET","getEmp.java?q="+empName,true);是不正确的,我不知道怎么说。
最佳答案
您应该始终使用 javascript 库来执行 ajax,为什么?因为该库会处理样板代码,而且会跨浏览器兼容。
因此对于 Liferay 6.x,您可以使用 alloy-ui因为它是默认库,否则您可以使用 jquery这是最受欢迎和易于使用的。只是您需要在您的 portlet 中明确包含 jQuery,而对于 Alloy UI,您可以直接使用它。
还有其他库,但我更喜欢这些,因为我对这两个库很满意:-)
我将使用 Alloy UI(速成类(class))举一个例子:
resourceURL
创建<portlet:resourceURL var="ajaxCallResourceURL" />
在 JSP 中onChange
)生成事件来调用 javascript 函数, onClick
等等io.request
模块调用 serveResource
通过 reourceURL
的方法serveResource
方法返回 HTML 文本或 JSON 列表以填充下拉列表success
io.request
的方法脚本执行一些 javascript 魔法来填充下拉列表现在让代码流动起来:
JSP
<%-- Create the Resource URL --%>
<portlet:resourceURL var="fetchWordsResourceURL" />
<aui:form method="post" name="fm" >
<%-- Calling the javascript function fetchWords() which will make the ajax call --%>
<aui:select name="sourceSelect" id="sourceSelect" label="alphabets" onChange='<%= renderResponse.getNamespace() + "fetchWords();"%>'>
<aui:option label="--" value="--" />
<aui:option label="A" value="a" />
<aui:option label="B" value="b" />
<aui:option label="C" value="c" />
</aui:select>
<%-- The ajax response would populate this drop-down --%>
<aui:select name="targetSelect" id="targetSelect" label="Words with Alphabets">
</aui:select>
</aui:form>
<aui:script>
<%-- This is the javascript function which will be executed onChange of the value of sourceSelect --%>
Liferay.provide(
window,
'<portlet:namespace />fetchWords',
function() {
var A = AUI();
var fetchWordsURL = '<%= fetchWordsResourceURL.toString() %>';
// selecting the sourceSelect drop-down to get the current value
var sourceElement = A.one("#<portlet:namespace />sourceSelect");
// selecting the targetSelect drop-down to populate values
var targetElement = A.one("#<portlet:namespace />targetSelect");
alert("Fetch word for alphabet = " + sourceElement.val());
A.io.request (
// the resource URL to fetch words
fetchWordsURL, {
data: {
// request parameters to be sent to the Server
<portlet:namespace />alphabet: sourceElement.val()
},
dataType: 'json',
on: {
failure: function() {
// if there was some error at the server
alert("Ajax failed!");
},
success: function(event, id, obj) {
// JSON Data recieved from Server
var wordsArray = this.get('responseData');
// crude javascript magic to populate the drop-down
//clear the content of select
targetElement.html("");
for (var j=0; j < wordsArray.length; j++) {
// alert("Alphabet ==> " + wordsArray[j]);
targetElement.append("<option value='" + wordsArray[j] + "'>" + wordsArray[j] + "</option>");
}
}
}
}
);
},
['aui-io']
);
</aui:script>
Portlet 类:serveResource 方法
@Override
public void serveResource(ResourceRequest resourceRequest,
ResourceResponse resourceResponse)
throws IOException, PortletException {
String alphabet = ParamUtil.getString(resourceRequest, "alphabet");
_log.info("Alphabet recieved from ajax request ==> " + alphabet);
// build the JsonArray to be sent back
JSONArray jsonArray = JSONFactoryUtil.createJSONArray();
if("a".equals(alphabet)) {
jsonArray.put("Apple");
jsonArray.put("Ape");
jsonArray.put("Ant");
}
else if("b".equals(alphabet)) {
jsonArray.put("Banana");
jsonArray.put("Ball");
jsonArray.put("Bat");
}
else if("c".equals(alphabet)) {
jsonArray.put("Code");
jsonArray.put("Cat");
jsonArray.put("Camera");
}
_log.info("Json Array populated ==> " + jsonArray.toString());
// set the content Type
resourceResponse.setContentType("text/javascript");
// using printWrite to write to the response
PrintWriter writer = resourceResponse.getWriter();
writer.write(jsonArray.toString());
}
到此为止,您已准备好编写一些高度 ajax 应用程序:-)。
关于ajax - 在 Liferay 中使用 ajax 从数据库中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16440197/
有人有 Comet 应用程序 .net 的任何样本吗? 我需要一个示例如何在服务器中保持客户端的连接? 最佳答案 这里也有一些不错的: http://www.frozenmountain.com/we
我想知道是否有 Yii2 专家可以帮助我了解如何最好地使用 ajax 表单与 Yii ajax 验证相结合。我想我可以在不带您阅读我所有代码的情况下解释这个问题。 我正在处理一个促销代码输入表单,用户
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期结果
f:ajax 和 a4j:ajax 标记之间有什么显着差异吗? 我知道 Richfaces 4 中的 a4j:ajax 基于 native f:ajax JSF2 标记,添加了一些 f:ajax 中未
我已经尝试过这样但无法获取数组列表。它返回“null” var data=[]; data[0] = '1'; data[1] = '2'; $.ajax({
在教程中可以看到 jQuery.ajax 和 $.ajax 喜欢这里 http://www.thekludge.com/form-auto-save-with-jquery-serialize/ jQ
过度使用 AJAX 会影响性能吗?在大型 Web 应用程序的上下文中,您如何处理 AJAX 请求以控制异步请求? 最佳答案 过度使用任何东西都会降低性能;在必要时使用 AJAX 将提高性能,特别是如果
似乎我无法使用 Ext.Ajax.request 进行跨域 ajax 调用。看起来 ScriptTag: True 没有任何效果。 这是我的代码: {
我正在使用 Bottle 微框架(但我怀疑我的问题来自它) 首先,如果我定义了一个从/test_redirect 到/x 的简单重定向,它会起作用。所以 Bottle redirect() 在简单的情
任何人都可以指出各种 AJAX 库的统一比较吗?我已经阅读了大约十几种不同的书,我即将开始一个项目,但我对自己是否已经探索了可能性的空间没有信心。 请注意,我不是在要求“我认为 XXX 很棒”——我正
似乎使用 AJAX 的站点和应用程序正在迅速增长。使用 AJAX 的主要原因之一可能是增强用户体验。我担心的是,仅仅因为项目可以使用 AJAX,并不意味着它应该。 可能是为了 UX,AJAX 向站点/
假设我有一个可以通过 Javascript 自定义的“报告”页面。假设我有可以更改的 start_date、end_date 和类型(“简单”或“完整”)。现在 我希望地址栏始终包含当前(自定义) V
我一直在阅读 Ajax 并且希望从 stackoverflow 社区看到我是否正确理解所有内容。 因此,正常的客户端服务器交互是用户在 url 中拉出 Web 浏览器类型,并将 HTTP 请求发送到服
这可能有点牵强,但让我们假设我们需要它以这种方式工作: 我在服务器的 web 根目录中有一个 index.html 文件。该文件中的 javascript 需要向/secure/ajax.php 发出
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 去年关闭。 Improve this
我希望ajax post成功进入主页。由于某种原因,我一直做错事。知道我应该做什么来解决这个问题吗? window.APP_ROOT_URL = ""; Ajax $.ajax({ url: '#{a
我在 2 个不同的函数中有 2 个 ajax 调用。我想用.click来调用这2个函数。 func1 将数据插入数据库,然后 func2 检索数据,所以我的问题是如何等到 func1 完全完成然后只执
我试图在单击按钮后禁用该按钮。我尝试过: $("#ajaxStart").click(function() { $("#ajaxStart").attr("disabled", true);
我试图在每个 Ajax 请求上显示加载动画/微调器 我的 application.js $(document).on("turbolinks:load", function() { window.
我正在显示使用jQplot监视数据的图形。 为了刷新保存该图的div,我每5秒调用一次ajax调用(请参见下面的JavaScript摘录)。 在服务器上,PHP脚本从数据库中检索数据。 成功后,将在5
我是一名优秀的程序员,十分优秀!