gpt4 book ai didi

ajax - 在 Liferay 中使用 ajax 从数据库中提取数据

转载 作者:搜寻专家 更新时间:2023-10-30 20:04:59 26 4
gpt4 key购买 nike

我正在使用 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,您可以使用 因为它是默认库,否则您可以使用 这是最受欢迎和易于使用的。只是您需要在您的 portlet 中明确包含 jQuery,而对于 Alloy UI,您可以直接使用它。

还有其他库,但我更喜欢这些,因为我对这两个库很满意:-)

我将使用 Alloy UI(速成类(class))举一个例子:

  1. 让我们先了解简单的步骤和流程:
    1. 呈现 JSP
    2. 有一个resourceURL创建<portlet:resourceURL var="ajaxCallResourceURL" />在 JSP 中
    3. 通过任何元素(如 onChange)生成事件来调用 javascript 函数, onClick等等
    4. 使用合金 io.request模块调用 serveResource通过 reourceURL 的方法
    5. serveResource方法返回 HTML 文本或 JSON 列表以填充下拉列表
    6. success io.request 的方法脚本执行一些 javascript 魔法来填充下拉列表
  2. 现在让代码流动起来:

    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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com