4

私は SringMVC を使用しており、JSP を別の JSP ファイルの div ボックスにロードする簡単なソリューションを探しています。タイルの使用について聞いたことがありますが、ajax/jquery を使用したいと思います。誰でもそれで私を助けることができますか?私はこれを2日間機能させようとしています...私の現在のアプローチは次のようなものです:

$(document).ready(function() {
    var html =  '<jsp:include page="searchSites.jsp"/>';
    $('#contentbox').load(html);
});

しかし、これは 2 行目に「Uncaught SyntaxError: Unexpected token ILLEGAL」エラーをスローしています。c:import も試しましたが、これも機能しません。ご助力ありがとうございます!

編集:

@Controller
@RequestMapping("/search")
public class SearchController {

    @Autowired private SiteService siteService;
    @Autowired private SystemService systemService;

    @RequestMapping(value = "")
    public String displaySearch(Model model) {
        return "displaySearch";
    }

    @RequestMapping(value = "sites", method = RequestMethod.POST )
    public String displaySites(Model model, @RequestParam String searchStr) {
        List<RSCustomerSiteViewDTO> sites = siteService.getSitesByName(searchStr);
        model.addAttribute("sites", sites);
        return "searchSites";
    }

    @RequestMapping(value = "systems", method = RequestMethod.POST)
    public String displaySystems(Model model, @RequestParam String searchStr) {
        List<RSServicedSystemViewDTO> systems = systemService.getSystemsByName(searchStr);
        model.addAttribute("systems", systems);
        return "searchSystems";
    }       
}

displaySearch.jsp

<html>
<head>
<title>Site</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<link rel="stylesheet" href="<c:url value="resources/css/style.css" />" />
<script>
    $(document).ready(function() {
        var html =  '/crsp/search/sites';
        $('#contentbox').load(html);
    });

</script>
</head>
<body>
    <div id="content">
        <div id="searchdiv">
            <form method="POST" action="search/sites">
                <input type=text name=searchStr placeholder="Search Site..."
                    id="searchSite" class="search" />
            </form>
            <form method="POST" action="search/systems">
                <input type=text name=searchStr placeholder="Search System..."
                    id="searchSystem" class="search" />
            </form>
        </div>
        <div id="contentbox">


        </div>
    </div>
</body>
</html>

searchSites.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<table>
    <tr id="header">
        <td>Name</td>
        <td>Customer</td>
        <td>City</td>
        <td>Region</td>
    </tr>
    <c:forEach var="site" items='${sites}' varStatus="loopStatus">
        <tr class="${loopStatus.index % 2 == 0 ? 'even' : 'odd'}">
            <td>${site.siteName}</td>
            <td>${site.customerName}</td>
            <td>${site.siteCity}</td>
            <td>${site.regionName}</td>
        </tr>
    </c:forEach>
</table>

追記:近づいてきました。今まで得たアクションではなく、フォームからこのようなものを起動する必要があります。

function searchSites(searchStr) {
    $.ajax({
        type: "POST",
        url: "sites?searchStr=",
        success: function(data) {
            $("#contentbox").html(data);
        }
    });
}
4

2 に答える 2

1

JSP タグを削除する必要があります

var html =  'searchSites.jsp';
$('#contentbox').load(html);
于 2013-06-25T09:45:57.183 に答える
1

load メソッドには、コントローラ メソッドの 1 つへのマッピングに対応する URL を指定する必要があります。

コントローラ

@Controller
@RequestMapping("/site")
public class MyController{

   @RequestMapping("/search")
   public String getFragment(){
       return "fragment";
   }
}

Javascript

$(document).ready(function() {
    var html =  "/contextRoot/site/search"; //you may need to use jstl c:url for this
    $('#contentbox').load(html);
});

設定

ViewResolverこの例では、ディスパッチャ構成ファイルに次のように設定されておりfragment.jsp、WEB-INF ディレクトリのルートにファイルがあることを前提としています。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".jsp" />
</bean>

Spring MVC でのリクエスト処理の基本的な概念は、リクエストが "何らかの方法で" コントローラー メソッドにマッピングされることです。Spring MVC は、この URL、リクエスト タイプ、パラメーターの存在、パ​​ラメーター値などを実行するさまざまな方法を提供します。しかし、基本的には、どのコントローラー/メソッドがこのリクエストを処理する必要があるかということになります。これは、ほとんどの場合、 を使用して実現され@RequestMappingます。

メソッドが見つかった後、データバインディングが発生します。つまり、リクエストパラメータが引数としてメソッドに提供されます。ここでも、パス変数、モデル属性など、パラメーターを引数に一致させるさまざまな方法があります...

次に、メソッドの本体が実行されます。これはほとんどカスタムであり、実装を提供します。

次の部分は、行き詰まっているように見える場所です。 次に、コントローラー メソッドは、どのビューを表示するかを Spring に指示します。これを行うには多くの方法がありますが、最も一般的な方法の 1 つはString、ビュー (.jsp) に対応するメソッドの最後に を返すことです。通常、ビュー リゾルバーは、返された .xml でビュー ファイルの名前をハードコーディングしないように登録されますString。返さStringれた は によって解決され、ViewResolver関連付けられたビューが返されます。

displaySearch.jspリクエストを処理した後に を提供したい場合、フォローアップの質問に答えるには、search/systemsそのビュー名を返すだけです。

@RequestMapping(value = "systems", method = RequestMethod.POST)
public String displaySystems(Model model, @RequestParam String searchStr) {
    List<RSServicedSystemViewDTO> systems = systemService.getSystemsByName(searchStr);
    model.addAttribute("systems", systems);
    return "displaySearch";
} 
于 2013-06-25T10:01:21.797 に答える