0

Liferay ポートレットを開発しています。ポートレットは、Liferay と同じサーバーから xml ファイルをロードし、ajax を介してこの xml を解析し、これらの値を jQuery に渡す必要があります。機能のみをテストするために、htmlファイルから始めました。これまでのところすべてが機能していますが、html および js コードをポートレットに配置すると、jQuery は機能しますが、ファイルをロードできません。/etc/config_files/settings.xml に xml ファイルを置きたい

これは私のスクリプトのjQueryの一部です

function getToolContent(tool){
     var layer = '.links_' + tool.toLowerCase();
     $(layer).text("");

     $.ajax({
        type:"GET",
        url: "/etc/config_files/settings.xml",
        dataType: "xml",
        success: function(xml){
               $(xml).find("tool").each(function() {              
                   if($(this).find('section').text() == tool){
                     var title = $(this).find('title').text();
                     var text = $(this).find('text').text();

                     $(this).find("link").each(function() {
                        var label = $(this).find('label').text();
                        var referer = $(this).find('referer').text();

                        $(layer).append('<a href="' + referer + '" class="formatted_link" alt="'+ tool + ' link">'+ label +'</a><br>'); 
                     });
                     $("#text").html('<h2>'+ title + '</h2>' +'\n'+ text);

                   }
               });
           }
     });
  }

ここにxmlファイルのサンプルがあります

<?xml version="1.0" encoding="UTF-8"?>
<descriptions>
   <tool>
      <section>TOOL NAME</section>
      <title>TOOL TITLE</title>
      <text>
         <![CDATA[ 
         <ul>
            <li>FEATURE 1</li>
            <li>FEATURE 2</li>
            <li>FEATURE 3</li>
         </ul>
         ]]>
      </text>
      <links>
         <link>
            <label>TOOL LINK LABEL 1</label>
            <referer>https://mytool1.com/</referer>
         </link>
         <link>
            <label>TOOL LINK LABEL 2</label>
            <referer>https://mytool2.com/</referer>
         </link>
      </links>
   </tool>
   <tool>
      ...
   </tool>
</descriptions>

単純にsettings.xmlからデータを取得できません

-手伝ってくれてありがとう

4

2 に答える 2

1

ポートレット内にxmlがある場合、これが役立ちました:

 $.ajax({
            type:"GET",
            url: "<%= request.getContextPath()%>/js/settings.xml",
            dataType: "xml",
 ...

settings.xml は $PORTLET-DIR/docroot/js/ にあります

サーバーから任意の場所にxmlをロードしようとした2番目のケース

@Override
public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
    response.setContentType("application/xml;charset=UTF-8");
    response.getPortletOutputStream().write("http://mydomain.com/settings.xml");
}

このEclipseエラーメッセージが表示されます

Multiple markers at this line
    - The method write(int) in the type OutputStream is not applicable for the arguments 
     (String)
    - url cannot be resolved to a variable

Liferayと同じサーバーからxmlを読み取れるようにしたい、または可能であれば別のサーバーから読み取れるようにしたい

ありがとう

于 2012-08-16T06:40:15.097 に答える
0

解決策 #1:ポートレット コンテキストからリソースを取得する

を入れsettings.xmlます$PORTLET-DIR/docroot/etc/config_files/settings.xml。これで、settings.xml がポートレット cotentx に存在し、これを jsp から直接取得できます。例:Liferay <%=request.getServletContext()%>jsp-tag:

...
$.ajax({
       type:"GET",
       url: "<%=request.getServletContext()%>etc/config_files/settings.xml",
...

解決策 2:ポートレット ResourceURL を使用してどこからでもリソースを取得する

Liferay MVC ポートレットを作成します。次のように、ポートレットserveResource(...)メソッドに配置します。

@Override
public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
    response.setContentType("application/xml;charset=UTF-8");
    response.getPortletOutputStream().write(... your settings.xml ...);
    ...
}

次のように、JavaScript と resourceURL を含む jsp ファイルを作成します。

<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
...
<liferay-portlet:resourceURL var="url" id="myid" />

...
$.ajax({
           type:"GET",
           url: "${url}",
...
于 2012-08-15T09:46:21.547 に答える