2008-12-02 24 views
14

मैं वर्तमान लोकेल के मूल्य के आधार पर एक जेएस फ़ाइल शामिल करना चाहता हूं। मैं इस प्रकार JSP से उस तक पहुंच की कोशिश की है:मैं जेएसपी से लोकेल तक कैसे पहुंच सकता हूं?

<%@ page import="java.util.Locale" %> 
<% if(((Locale) pageContext.getAttribute("org.apache.struts.action.LOCALE",PageContext.REQUEST_SCOPE)).getLanguage().equals("de")) { %> 
    <script src="../themes/administration/js/languages/i18nDE.js" type="text/javascript"> </script> 
<% } else { %> 
    <script src="../themes/administration/js/languages/i18nEN.js" type="text/javascript"> </script> 
<% } %> 

हालांकि, मैं एक java.lang.NullPointerException क्योंकि pageContext.getAttribute("org.apache.struts.action.LOCALE",PageContext.REQUEST_SCOPE)NULL है हो रही है।

क्या कोई जानता है कि मैं इसे कैसे हल कर सकता हूं?

उत्तर

2

मुझे Struts 1.x प्रलेखन में निरंतर org.apache.struts.action.LOCALE नहीं मिल रहा है - क्या यह org.apache.struts.Globals.LOCALE_KEY होना चाहिए? या अन्य LOCALE_KEY स्थिरांक में से एक?


संपादित करें: org.apache.struts.action.LOCALEorg.apache.struts.Global.LOCALE_KEY की मूल्य है - तो मूल्य ही है, एक प्रमुख के रूप में इस्तेमाल, समस्या नहीं होनी चाहिए।

सत्यापित करें कि LOCALERequest में सेट किया जा रहा है। मेरी समझ यह है कि LOCALE_KEYPageContext.SESSION_SCOPE में सेट होने पर सेट है।

0

केन जी ने उत्तर की ओर इशारा किया।

pageContext.getAttribute("org.apache.struts.action.LOCALE",PageContext.SESSION_SCOPE) 

बजाय इस्तेमाल किया जाना चाहिए

pageContext.getAttribute("org.apache.struts.action.LOCALE",PageContext.REQUEST_SCOPE) 
0
<%@page import="java.util.Locale"%> 
<%@page import="org.apache.struts.Globals"%> 


<%Locale locale = (Locale)session.getAttribute(Globals.LOCALE_KEY); 
if (locale.getLanguage().equals("fr")) {%> 
    <script language="JavaScript" src="lib/js/dateofday.js" type="text/javascript"></script> 
    <script type="text/javascript" src="<%=request.getContextPath() %>/lib/js/jscalendar-1.0/lang/calendar-fr.js"></script> 
<%} else {%> 
    <script language="JavaScript" src="lib/js/dateofday-en.js" type="text/javascript"></script> 
    <script type="text/javascript" src="<%=request.getContextPath() %>/lib/js/jscalendar-1.0/lang/calendar-en.js"></script> 
<%}%> 
3

Struts सत्र में स्थान रखता है। लोकेल प्राप्त करने के लिए सही तरीका है:

Locale locale = (locale)request.getSession().getAttribute(Globals.LOCALE_KEY); 
19

फिलहाल मैं इस का उपयोग कर रहा:

<c:set var="localeCode" value="${pageContext.response.locale}" /> 

यह बाद में पहुँच हो सकता है ${localeCode}

  1. Scriplet मोड का उपयोग करके, निराश! एक स्क्रिप्टलेट का उपयोग न करने के कारण Why not use Scriptlets देखें।

localeCode चर के साथ एक स्क्रिप्टलेट अंदर पूछे जा सकता है:

<% 
    Object ob_localeCode = pageContext.getAttribute("localeCode"); 
    if (ob_localeCode != null) { 
    String currentLanguageCode = (String) ob_localeCode; 
    } 
    //more code 
%> 
  1. Scripletless मोड सही रास्ता तय करना। How to avoid Java Code in JSP-Files? यहां SO पर देखें।

मैं इस समय वसंत 2.5 कॉन्फ़िगरेशन का उपयोग कर रहा हूं।

तो इस के बाद, अपने मूल प्रश्न पर वापस आने के आप की तरह कुछ को लागू कर सकते हैं:

<c:set var="localeCode" value="${pageContext.response.locale}" /> 
<c:choose> 
    <c:when test="$localecode == 'de' }"> 
    <script src="../themes/administration/js/languages/i18nDE.js" type="text/javascript"> </script> 
    </c:when> 
    <c:otherwise> 
    <script src="../themes/administration/js/languages/i18nEN.js" type="text/javascript"> </script> 
    </c:otherwise> 
</c:choose> 

या तुम सच में अपने सहकर्मियों को प्रभावित करने के लिए कुछ लघु कोड का उपयोग करना चाहते हैं, तो आप कर सकते हैं:

<c:set var="localeCode" value="${fn:toUpperCase(pageContext.response.locale)}" /> 
<c:set var="availLanguages" value="EN,DE" /> 
<c:if test="${!fn:contains(availLanguages,localeCode)}"> 
    <c:set var="localeCode" value="EN" /> 
</c:if> 

<script src="../themes/administration/js/languages/i18n{$localeCode}.js" type="text/javascript"> </script> 
+2

+1 एक स्क्रिप्टलेसलेस तरीके से +1। – BalusC

+0

@ बालुससी से सहमत - पिछले दो समाधानों में से एक को जाने का रास्ता होना चाहिए। स्क्रिप्टलेट्स पर न जाएं ... कभी भी ... –

+0

क्या आपको पता है कि क्लाइंट को 'PUT' अनुरोध के बाद कस्टम त्रुटि पृष्ठ (403) पर अग्रेषित किया गया है, तो क्यों' pageContext.response.locale' शून्य वापस आ जाएगा? .. अन्य सभी मामलों के लिए, यह ठीक काम करता है। – theyuv

1

struts2 में, ईएल का उपयोग कर रहा सफलतापूर्वक इस्तेमाल किया:

${sessionScope["org.apache.struts2.action.LOCALE"]} 

उदा उत्पादन के लिए लोकेल का मूल्य:

<c:out value='${sessionScope["org.apache.struts2.action.LOCALE"]}'/> 
4

struts2 में

<s:if test="#request.locale.language=='us'"> 
    <s:select name="gender" list="#{'M':'Male','F':'female'}" ></s:select> 
</s:if> 
0

दो सबसे अच्छा locale पाने के लिए तरीके की कोशिश कार्रवाई समर्थन एक JSP पर, एक कार्रवाई को विरासत के getLocale का उपयोग करना है: <s:hidden name="locale"/> या
<s:property value"%{locale}"/>

स्थान this method साथ बदल दिया गया है है।

यह के समान नहीं है:
${pageContext.response.locale}

1

मैं नया उदाहरण जोड़ा इस में थोड़ा और अधिक स्पष्ट करने के लिए, क्योंकि इस पोस्ट मुझे बहुत मदद नहीं की।

jsp से स्थान प्राप्त करने के लिए:

<%=request.getLocale()%> 

यह एक ServletRequest विधि एक रिटर्न है पसंदीदा स्थान है कि ग्राहक में सामग्री को स्वीकार करेंगे, स्वीकार करें-भाषा शीर्ष लेख पर आधारित है,

Struts2 Locale: <s:property value="#request.locale"/> 

रिटर्न Struts2 फ्रेमवर्क के लिए लोकेल, जो पिछले उदाहरण के समान हो सकता है या नहीं भी हो सकता है। यदि आप परम request_locale = उदाहरण के लिए डे ... पारित

<s:url id="localeDE" namespace="/"> 
    <s:param name="request_locale" >de</s:param> 
</s:url> 
<s:a href="%{localeDE}" >German</s:a> 

struts2 # request.locale को

1

इस

साथ प्रयास करें मूल स्वीकार करें-भाषा शीर्ष लेख का मान अधिभावी जर्मन बदल जाएगा
<s:if test='locale.toString() == "si"'> 
    <script src="../themes/administration/js/languages/i18nDE.js" type="text/javascript"> </script> 
</s:if> 
<s:elseif test='locale.toString() == "ta"'> 
    <script src="../themes/administration/js/languages/i18nEN.js" type="text/javascript"> </script> 
</s:elseif> 
<s:else> 
    ANOTHER SCRIPT 
</s:else> 
संबंधित मुद्दे

 संबंधित मुद्दे