2009-12-03 4 views
1

Dojo 플러그인과 함께 Struts 2.1.6을 사용하고 있습니다. 전체 앱에는 ajax 링크 (sx : a)가 있습니다.Struts2 뒤로 버튼과 링크

누구나 뒤로 버튼 기능을 구현하고 특정 콘텐츠에 연결하는 데 성공 했습니까?

아무도 구현 방법에 대해 경험이 있습니까? 나는 (좋은 솔루션이 이미 존재하지 않는 경우)과 같이 뭔가를 구현할 계획입니다 :

  • 은 그때 읽고 적절한 콘텐츠를 다음 notifyTopics에 게시 할 수 있습니다 JS와 주소 표시 줄에 링크 (추가 매개 변수)을 변경.

아니면 전체 응용 프로그램을 jQuery 플러그인을 사용하도록 변경해야합니까? jQuery에는 ajax 페이지의 뒤로 버튼 및 링크에 대한 좋은 솔루션이 있습니까?

+0

어떤 Dojo 버전을 사용하고 있습니까? 마지막으로, Struts가 Dojo 플러그인을 0.4부터 업데이트하지 않았다고 들었습니다. (지금은 몇 살입니다.) – peller

+0

예, dojo-plugin은 버전 2.0.6부터 사용되지 않습니다. – Trick

+0

Dojo의 최신 버전이 있습니다. 불행하게도 당신이보고있는 것은 그 당시 꽤 오래되었습니다. – peller

답변

0

Struts를 모르지만 dojo.undo (0.4.3)을 보았습니까?

난 내 머리 위로 떨어져 2 개 간단한 방법을 생각할 수
+0

저는 이것을 보았습니다. (아무런 성공없이) 구현하려고 시도했지만 Struts2와 호환되는 솔루션을 찾지 못했습니다. 가장 큰 문제점은 히스토리 동적 컨텐츠를 "채우는"방법입니다. – Trick

1

:

<s:form action="actionName"> 
    <input type="hidden" value="<s:property value="someProperty"/>" name="someProperty"/> 
    <input type="hidden" value="<s:property value="someProperty2"/>" name="someProperty2"/> 
    <s:submit value="Back" /> 
</s:form> 

또는

<s:url name="backURL" action="actionName"> 
    <s:param name="someProperty" value="someProperty"/> 
    <s:param name="someProperty2" value="someProperty2"/> 
</s:url> 
<a href="<s:property value="#backURL"/>">Back</a> 

이미 쿼리 문자열 매개 변수가있는 경우 :

<a href="#" onclick="javascript.window=document.referrer;">Back</a> 

또는

<input type="button" value="Back" onclick="javascript.window=document.referrer;"/> 
+0

시작하기에 좋은 아이디어이지만, 이후에는 다양한 목표를 게시 할 수있는 솔루션을 찾아야합니다. – Trick

1

Struts 2를 도장과 함께 사용하고 뒤로 버튼을 구현하려고했습니다. 이미 Struts 2의 Ajax 구현의 머리를 쓰고 있습니다. 그들은 주로 간단하고 빠른 ajax 함수 호출을 작성하기 위해이를 사용하고 썼으며보다 광범위한 용도에 적합하지 않습니다. 당신이 할 때 더하기 : head theme = 'ajax'tag; struts는로드 시간을 없애기 위해 필요한 모든 Ajax js 파일을 가져옵니다.

나는 dojo를 배우고 struts 2와 독립적으로 라이브러리를 사용한다. 2. jQuery를 얻으면 상대적으로 간단한 버튼 기능을 구현할 수있게되었다. (더 많은 스트러츠 2 테마 = 'ajax') .

+0

게시를 제외하고 내 솔루션에서 Dojo를 사용하지 않았습니다. Gmail과 비슷한 것을 만들었습니다. – Trick

0

내 모든 링크는 매개 변수 menuId (물론 표시된 메뉴의 ID)를 찾는 하나의 동작을 거칩니다. 이 작업에서

는 응답을 반환하기 전에 하나 개의 자바 스크립트 함수가 호출되도록 설정 :

setBackMenuId(menuId,sometext) 

menuId와는 sometext 브라우저 로그 이력 더 나은 해당 메뉴의 이름이기 때문에, ID입니다.

function setBackMenuId(id,subtekst) { 
window.location.hash = "menuId="+id; 
document.title = subtekst; 
selectedHash = document.location.hash; 
if(intervalHashSearch == '') { 
    initializeHashSearch(); 
} 
} 

그런 다음, 다른 필요한 JS 기능 : 당신이 그것을 보면 당신이 볼

function publishLinkTarget() { 
    var param = window.location.hash; 
    if(param) { 
     if(param.indexOf("menuId") > 0) { 
      var id = param.split("=", 2); 
      if(id[1]) { 
       setCookie('backMenuId',id[1],1,false); 
       setTimeout('publishLayoutContent()', 100); 
      } 
     } 
    } 
} 

var selectedHash = ''; 
var intervalHashSearch = ''; 
function initializeHashSearch() { 
    intervalHashSearch = window.setInterval('checkHash()', 500); 
} 

function stopHashSearch() { 
    window.clearInterval(intervalHashSearch); 
    intervalHashSearch = ''; 
} 

function checkHash() { 
    var currentHash = document.location.hash; 
    if(selectedHash != currentHash) { 
     selectedHash = currentHash; 
     publishLinkTarget(); 
    } 
} 

function publishLayoutContent() { 
    dojo.event.topic.publish("layoutContentTarget"); 
} 

이 먼저라는 것을, 해시 및 매개 변수 바, 변경 제목을 해결하기 위해 추가되는 'setBackMenuId' 그런 다음이 해시를 기억하므로 간격 해시 검색을 통해 차이점을 찾을 수 있습니다. 그런 다음이 해시 검색을 초기화합니다.

'checkHash'는 500 밀리 초 동안 실행되며 해시가 변경되었는지 (즉, 뒤로 버튼이 눌려 졌는지, 새 링크가 클릭되지 않았는지 확인하는 중입니다 (setBackMenuId가 selectedHash를 설정 함) true 인 경우 누름) 함수 'publishLinkTarget'이 호출되어 해시에서 매개 변수를 읽습니다. 쿠키가 정상이면 쿠키를 설정하므로 HttpServletRequest에서 해당 매개 변수를 읽고 어떤 메뉴 ID 링크인지 확인할 수 있습니다. 내가 또한 'publishLayoutContent'로 만들어지는 콘텐츠를 게시해야 함을 의미 액션 클래스에서

(이의 MenuAction, 방법보기에 발표 한 동일) 만이 중요하다.

Integer menuId = null; 
    if(request.getParameter("menuId") != null) { 
     menuId = Integer.valueOf(request.getParameter("menuId")); 
    } else { 
     menuId = getIntCookie("hiddenMenuId"); 
    } 

매개 변수 (링크 클릭)에서 메뉴 ID를 얻지 못하면 쿠키 (뒤로/앞으로 버튼)에서 가져옵니다. 이 목표와

그리고 JSP :

<s:url var="layoutContentUrl" action="Menu-view" namespace="/public" /> 
    <sx:div showLoadingText="false" indicator="ajaxIndicator" 
     id="layout-content" href="%{layoutContentUrl}" theme="ajax" 
     listenTopics="layoutContentTarget" preload="false" 
        afterNotifyTopics="/ajaxAfter"> 
</sx:div> 

참고 : 모든 것이 하나 개의 매개 변수를 통해 연결되어있는 경우는 특별한 경우이지만, 쉽게 다른 목표를 게시 다른 매개 변수를 확장 할 수 있습니다. 나는 그것을 어딘가에 출판하기에 충분히 일반화하려고 노력할 것이다. 그러나 이것이 먼 길을 간다. (내 생각 엔) 먼 길을 간다.

어떤 질문이 있으면 게시 해주십시오.

관련 문제