2015-04-07 7 views
6

में गतिशील और अनुवादित शीर्षकों का समर्थन करना मेरे पास एक स्प्रिंग एमवीसी प्रोजेक्ट है जो अपाचे टाइल्स का उपयोग करता है। मैं इतना है कि खिताब इस प्रकार का संदेश स्रोत से पढ़ा जा सकता है लागू किया है:अपाचे टाइल्स

<tiles-definitions>  
    <definition name="some-definition" extends="public.base"> 
     <put-attribute name="title" value="some-definition.title" cascade="true" /> 
    </definition> 
</tiles-definitions> 

और मेरे टेम्पलेट फ़ाइल में (public.base द्वारा परिभाषित), मैं निम्नलिखित है:

<title><spring:message text="" code="${title}" /></title> 

अब इस महान काम करता है स्थिर अनुवादित शीर्षक के लिए, लेकिन मैं गतिशील शीर्षक का समर्थन करना चाहता हूं, उदाहरण के लिए कंपनी का नाम प्रदर्शित करने के लिए। <c:out value="${title}" />: इस तरह मेरे टेम्पलेट में

<tiles-definitions>  
    <definition name="some-definition" extends="public.base"> 
     <put-attribute name="title" expression="${company.name}" /> 
    </definition> 
</tiles-definitions> 

और फिर बस उत्पादन का शीर्षक: मैं इस तरह यह कर सकता है। हालांकि, समस्या यह है कि मेरा कोड टूट जाता है क्योंकि title विशेषता का मान अब कोई संदेश कुंजी नहीं है।

  1. स्टेटिक शीर्षक, उदाहरण के लिए: मैं निम्न परिदृश्यों समर्थन करने में सक्षम होना चाहता हूँ "हमारे बारे में"
  2. शुद्ध गतिशील शीर्षक, उदा। "$ {company.name}"
  3. अनुवादित सामग्री के साथ गतिशील शीर्षक, उदा। "$ {Company.name} में आपका स्वागत है"

आदर्श रूप से, मैं अपने संदेश स्रोत के भीतर अभिव्यक्ति भाषा का उपयोग कर सकता था, लेकिन मैं इसे काम नहीं कर सका। मैंने विभिन्न समाधानों के साथ काफी प्रयोग किया है, लेकिन मुझे एक सभ्य प्रतीत नहीं होता है। अगर मैं अपने संदेश स्रोत के भीतर अभिव्यक्ति भाषा का उपयोग कर सकता हूं, तो यह आसान होगा। उदाहरण के लिए, क्या किसी भी तरह से ऐसा करना संभव होगा?

some-definition.title = Hello there, ${company.name} 

और मेरे टेम्पलेट में:

<spring:message text="" code="some-definition.title" var="test" /> 
<c:out value="${test}" /> 

से काम नहीं होता है, क्योंकि यह चर के वास्तविक सामग्री से ${company.name} आउटपुट बल्कि। क्या इस काम की तरह कुछ करने का कोई तरीका है? या क्या कोई अन्य तरीका है जिसमें मैं ऊपर सूचीबद्ध परिदृश्यों का समर्थन कर सकता हूं?

मैंने एक कस्टम जेएसटीएल टैग बनाने के बारे में सोचा था जहां मैं सादे जावा कोड (स्ट्रिंग का अनुवाद किया गया है) में एक स्ट्रिंग अभिव्यक्ति का विश्लेषण करूंगा, लेकिन मुझे एहसास हुआ कि मुझे शायद "चर के लिए मूल वस्तु निर्दिष्ट करना होगा प्रतिस्थापन "काम करने के लिए, as documented here। तो यह ऐसे गतिशील समाधान की तरह प्रतीत नहीं होता है।

वहाँ किसी भी तरह से, जिसमें मैं इस कार्य को पूरा कर सकते हैं? किसी भी प्रकार की मदद की बेहद सराहना की जाती है!

+0

हैलो एंडी, मैं थाइमेलीफ (टाइल्स के साथ) का उपयोग कर रहा हूं और आपका प्रश्न मुझे पहली बार याद दिलाता है कि मुझे संदेशों से निपटना है: http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf। एचटीएमएल # संदेश –

+0

लिंक के लिए धन्यवाद, @PatrickLC। आप सही हैं कि आप आमतौर पर ऐसा करते हैं, और मैंने अतीत में ऐसा किया है। हालांकि, मैं अभी भी अनिश्चित हूं कि टेक्स्ट का अनुवाद करते समय पैरामीटर को स्पष्ट रूप से पास किए बिना मेरे विशेष उपयोग मामले में इसे कैसे किया जाए। ऐसा करना भी संभव नहीं है जो मैं चाहता हूं, मुझे यकीन नहीं है। – Andy0708

उत्तर

0

टाइल्स परिभाषाओं का स्थानीयकरण बिल्कुल मदद करेगा? रेफ http://tiles.apache.org/framework/tutorial/advanced/l10n.html

अन्यथा मैं एक ViewPreparer को देखता हूं जो आपके लिए वसंत संदेशों को फैलाता है।

+1

स्थानीय टाइल्स परिभाषाएं मदद करती हैं यदि मेरे शीर्षक में गतिशील सामग्री नहीं है। मैं पहले एक ViewPreparer को लागू करने की कोशिश करने के बारे में सोच रहा था, और यह जाने का रास्ता हो सकता है। आपके सुझावों के लिए धन्यवाद! – Andy0708

0

एक टाइल परिभाषा 'नियंत्रक क्लास' नामक एक विशेषता को परिभाषित कर सकती है। इस वर्ग को org.apache.struts.tiles.Controller इंटरफ़ेस को कार्यान्वित करना चाहिए और टाइल परिभाषा प्रदान करने से पहले इसकी ओवरराइड निष्पादित() विधि को कॉल किया जाता है। टाइल्स नाम-मान युग्म और भी HttpServletRequest वस्तु का श्रेय देना

निष्पादित विधि/लिखने पढ़ने की पहुँच गया है।आप अपनी विशेषता को देख सकते हैं और मूल्यों को गतिशील रूप से बदल सकते हैं या अन्यथा इसे एक संपत्ति फ़ाइल से अर्ध स्थिर मूल्य के साथ प्रतिस्थापित कर सकते हैं।

<definition name="some-definition" extends="public.base" controllerClass="pkgName.CustomController"> 
     <put-attribute name="title" expression="${company.name}" /> 
    </definition> 

और फिर अपने CustomController कक्षा में, आप बदल सकते हैं गुण

public class CustomController implements Controller{ 
     public void execute(ComponentContext tileContext, 
      HttpServletRequest request, HttpServletResponse response, 
      ServletContext servletContext) throws ServletException, IOException {  
      String attrName = (String)tileContext.getAttribute("title"); 
      String attrVal = request.getAttribute("pageTitle"); //get a dynamic value or else retrieve from a resource bundle 
      tileContext.putAttribute(attrName,attrVal); 
    } 

    public void perform(ComponentContext tileContext, 
      HttpServletRequest request, HttpServletResponse response, 
      ServletContext servletContext) throws ServletException, IOException { 
     execute(tileContext, request, response, servletContext); 
    } 
} 
0

आप इस के लिए टाइलें उपयोग नहीं कर सकते, जस्ट अपने वसंत-मॉडल:

नियंत्रक में:

@RequestMapping(value = { "/page1" }, method = RequestMethod.GET) 
public String page1() { 
    model.addAttribute("titre_page", messageSource.getMessage("home.hello", null,null) 
} 

लेआउट.जेएसपी:

... 
<title>${titre_page}</title> 
... 
<tiles:insertAttribute name="body" /> 
.... 
संबंधित मुद्दे