JSP 태그 내에서 JavaScript를 사용합니다
-
04-07-2019 - |
문제
나는 본 적이 이 질문 태그 컨텐츠 자체와 관련된 JS-Files의 가져 오기를 회복합니다. 비슷한 문제가 있습니다. 여기에 일부 HTML을 생성하는 JSP 태그가 있으며이 HTML의 동작을 처리하는 일반적인 JS 구현이 있습니다. 또한 몇 가지 초기화 문을 작성해야하므로 JavaScript를 통해 나중에 사용할 수 있습니다. 내 JavaScript 내 에서이 "핸들러"를 사용할 수 있으려면 어떻게 든 액세스 할 수 있어야합니다.
문제는 ... 인라인을 쓰는 것이 괜찮습니까?u003Cscript> tags along with my HTML for instantiation and initialization purposes (personally I don't think its very elegant)? And about being accessible to the JS world, should I leave a global var referencing my handler object (not very elegant aswell I think), are there better ways to do it?
해결책
자체 파일에서 JavaScript를 위해 노력해야합니다. 이것은 일반적으로 완료됩니다 진보적 인 향상. 그러나 때로는 동일한 JSP가 다른 언어로 페이지를 렌더링하는 경우에는 선택의 여지가 없습니다. 실제 예는 다음과 같습니다.
JSP :
<script src="/javascript/article_admin.js"></script>
<script type="text/javascript">
NP_ArticleAdmin.initialize({
text: {
please_confirm_deletion_of: '<i18n:output text="please.confirm.deletion.of"/>',
this_cannot_be_undone: '<i18n:output text="this.cannot.be.undone"/>'
}
});
</script>
JavaScript (article_admin.js) :
/*global NP_ArticleAdmin, jQuery, confirm */
NP_ArticleAdmin = function ($) {
var text;
function delete_article(event) {
var article = $(this).parents("li.article"),
id = article.attr("id"),
name = article.find("h3.name").html();
if (confirm(text.please_confirm_deletion_of + name + text.this_cannot_be_undone)) {
$.post("/admin/delete_article", {id: id});
article.fadeOut();
}
event.preventDefault();
return false;
}
function initialize(data) {
text = data.text;
$("#articles a.delete").click(delete_article);
}
return {initialize: initialize};
}(jQuery);
이 예에서 JSP-File의 유일한 JavaScript는 필요한 부분입니다. 핵심 기능은 자체 JS 파일로 분리됩니다.
다른 팁
나는 당신이 여기서 무엇을 묻는 지 확실하지 않지만 <script>
JSP의 JavaScript 코드를 인스턴스화하기위한 태그. 나는 종종이 모델을 따르면서 외부 JavaScript 파일로 라이브러리 코드를 작성한 다음 생성자를 <script>
태그.
로직은 외부 파일에 있으므로 디버깅을 쉽게 할 수 있습니다 (Firebug는 인라인 JavaScript 코드를 디버깅하는 데 어려움이있는 것 같습니다). 라이브러리가 캐시되지만 인스턴스화하는 데이터는 (원하는 동작이 아닙니다).
대안은 외부 JavaScript 파일 또는 Ajax 호출에서 인스턴스화 코드를 동적으로 생성하도록하는 것입니다. 나도 긍정적 인 결과를 얻었습니다.
결정 요인은 당신이 얼마나 많은 동적 데이터를 가지고 있는지라고 생각합니다. 큰 데이터 구조를 나타내야하는 경우 JSON을 반환하는 Ajax 호출을 통해 제공합니다. 생성자에게 간단한 호출이 있으면 JSP에 넣으십시오.
글로벌 변수는 종종 모든 것을 시작하는 최상위 객체에 대한 글로벌을 갖게됩니다. 그 안에는 도우미 대상에 대한 다른 모든 언급이 있습니다.
나는 그것이 완전히 우아하지 않다는 데 동의하지만, 서버 측 결정을 Ajax 통합 환경과 결합 할 때 몇 번이나하는 것으로 알려져 있습니다. 반향 인라인u003Cscript> tags in order to initialize some variables isn't a terrible thing, as long as no one sees it.
더 나은 방법에 관해서는, 나는 이것을 알지 못합니다. 나는 더 우아하거나 "적절한"솔루션을 찾지 못했기 때문에 이것을 거의하지 않았습니다.
사용해도 괜찮습니다 <script>
HTML에 따라 태그. 필요한 경우가 있지만 더 나은 방법까지는 알지 못합니다. 물건을 더 복잡해 보이지 않으면 사용하기가 더 쉽습니다. <script>
그런 다음 JS 파일을 구현할 수있는 방법을 찾으려고 태그.