내 문제로 2 시간 동안 검색되었지만 여전히 해결 방법을 찾지 못했습니다. 내가 원하는 무엇struts2 i18ninterceptor가 동일한 페이지 또는 동작으로 돌아 가기
: 나는 국제 출원에 대한 struts2를 사용하고
그래서 다중 언어 지원이 필요합니다. 그래서 i18n-Interceptor가 전달할 하나의 매개 변수로 로케일을 변경한다는 것을 알았습니다 (매우 멋지다!). 이제 응용 프로그램의 모든 지점에서 로케일을 변경하여 사용자가 언어를 변경할 수 있고 그가 사용하는 것과 동일한 페이지 나 동작으로 전달할 수 있습니다. 이것은 그렇게 쉬운 것처럼 보이지 않습니다. 난 이미 구글에있는 다음과 같은 일을 시도했지만, 나를 위해 작동하지 않습니다
가 acutall URL을 /를 사용하여 JSP에 대한 URI ("ShowUser.action"같은) 다른 로케일이 전화 -> 매개 변수가있는 jsp에서 전체 URL 또는 URI를 가져 오는 방법이 없습니다. URL이 나에게 타일 (예 : /content/site/user.jsp)의 현재 사이트를 제공하고 URI가 내 타일 레이아웃 (즉, /content/layout.jsp)을 반환합니다. > 방법을 찾을 수 없습니다 ..
사용 "request.getHeader ("- 나는 request.getRequestUrl()와
사용 ActionContext에이 JSP의 전체 URL을 얻을 수 request.getRequestURI()를 시도했습니다 ChangeLocale.action ""내에서) "referal이 동적으로 struts.xml에서 redirectAction로 설정 -> 작업을하지만 너무 많은 코드 세 번째 포인트와 함께 일하고있다 매개 변수를 사용하여 URL 등)
을 구문 분석 다음 코드는 더 나은 해결책을 찾고 있습니다.
struts.xml의 관련 부분
<action name="Locale" class="de.smg.LocaleAction">
<interceptor-ref name="i18n"/>
<interceptor-ref name="basicStack"/>
<result type="redirectAction">${forwardAction}</result>
</action>
LocaleAction.java :
http://server:port/ShowUser.action?id=1
내가로 전환 사용자 사이트에 : 그래서 작업에서, 즉 온
public class LocaleAction extends ActionSupport implements ServletRequestAware {
private static final long serialVersionUID = 1L;
private static final String FALL_BACK_ACTION = "ShowStartPage";
private HttpServletRequest request;
private String forwardAction = null;
@Override
public String execute() throws Exception {
String referer = request.getHeader("referer");
String action = FALL_BACK_ACTION;
if (referer!=null) {
// WeberT: first cut off the protocol, server and port...
referer = referer.substring(referer.lastIndexOf("/") + 1, referer.length());
// WeberT: then cut of the .action part if available
int dotPos = referer.indexOf(".");
if (dotPos>0) {
int qMarkPos = referer.indexOf("?");
if (qMarkPos> 0 && dotPos < qMarkPos) {
action = referer.substring(0, dotPos) + referer.substring(qMarkPos, referer.length());
} else {
action = referer.substring(0, dotPos);
}
}
forwardAction = action;
}
return SUCCESS;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
/**
* @return the forwardAction
*/
public String getForwardAction() {
return forwardAction;
}
}
다른 언어로 LocaleAction이 forwardAction을 반환합니다.
ShowUser?id=1
이렇게 작동하고 있지만 어두운면을 좋아하는 것 같습니다. 이 문제를 해결하기위한 올바른 해결책은 무엇입니까? 귀하의 답변에 감사드립니다. 난 당신이 ActionContext
에서 벗어나고 싶은 정확히 잘 모르겠지만, 대부분의 정보가 여기 ActionContext
에서 찾을 수 있습니다
그게 전부 야 - 고마워, 나는 눈이 멀었다 :-) includeParams = "all"과 빈 값이 트릭을 만든다. – user1723414
그러나 struts.xml의 올바른 구성은 무엇입니까? 나는 또한이 물건으로 조금 잃어버린 ... – aloplop85
@ aloplop85 : 특별한 행동 구성이 필요하지 않습니다. 여전히 문제가 있거나 업데이트하지 않은 경우 upvote를 사용하여 업데이트 및 의견을 확인하십시오. –