2010-02-05 5 views
20

Chciałem dynamicznie zastępować element zastępczy we właściwościach w aplikacji java. Podobnie jakZastępowanie dynamiczne zastępcze we właściwościach w java

WelcomeMessage=Welcome Mr. {firstName} {lastName} !!! 

Te zmienne firstName i LastName muszą być podstawiane dynamicznie. Czy powinniśmy używać tego samego silnika szablonów prędkości? Czy istnieją inne struktury open source dla tego samego?

Dzięki Manish

Odpowiedz

0

prędkość jest najlepszym narzędziem jak teraz. Ale zależy to od tego, jakiego typu pliku chcesz użyć jako szablonu.

Na przykład, jeśli chcesz użyć dokumentu MS Word jako szablonu, musisz rozszerzyć klasy prędkości i napisać własną implementację.

+0

zbyt ciężki, zbyt skomplikowany – msangel

43

Można używać klasy Java SE o numerze MessageFormat. Pozwala ci to zrobić dokładnie to, o co prosisz.

W twoim przypadku poniższy fragment kodu musi wystarczyć, zakładając, że rekwizyty zawierają wszystkie właściwości załadowane z twojego pliku.

MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last"); 

Należy pamiętać, że pliki właściwości powinny mieć indeks parametrów zamiast nazwanych parametrów, jak poniżej.

WelcomeMessage=Welcome Mr. {0} {1} !!! 
+0

Czyni tak, oprócz tego, że w niewytłumaczalny sposób, to zdefiniowano używanie liczbowych symboli zastępczych zamiast znaczących symboli symbolicznych. Zadziwiające, o ile trudniej to wykorzystać. –

+0

Edytowałem moją odpowiedź w trakcie komentowania.:) –

6

Velocity jest dość stare i nieprzyjemne, moim zdaniem, są ładniejsze sposobów, aby to zrobić:

  • StringTemplate jest najprostszym silników szablon i wystarczająco dobre za to, co trzeba (patrz przykłady składni here).
  • Jeśli już używasz Spring 3, ma klasę PropertyPlaceholderHelper, która może to również zrobić, ale nie użyłbym Springa tylko po to, by zdobyć tę jedną klasę.
+0

Prędkość nie jest idealna. Uważam jednak, że wykonuje swoją pracę bardzo dobrze i mogę ją bardzo polecić. Ponadto koncepcja skrzynki narzędziowej pozwala na bardzo łatwą integrację twojej własnej "logiki szablonowej". I ma doskonałą integrację z Servletami w ogóle (i Struts 1.x) – Markus

0

w aplikacji internetowej Java z JSF 2, który będzie działał w następujący sposób:

src \ main \ webapp \ WEB-INF \ zwrócona-config.xml

... 
    <resource-bundle> 
     <base-name>com.mycompany.resources.messages</base-name> 
     <var>mytext</var> 
    </resource-bundle> 
... 

src \ main \ resources \ com \ mojafirma \ zasoby \ wiadomości \ mytext.properties

WelcomeMessage = Welcome Mr. {0} {1} !!! 

index.xhtml

<h:outputFormat value="#{mytext.WelcomeMessage}" >   
    <f:param value="#{userSessionBean.first}" /> 
    <f:param value="#{userSessionBean.last}" /> 
</h:outputFormat> 
1

Jedną z okazji jest ciąg substitutor:

WelcomeMessage=Welcome Mr. ${firstName} ${lastName} !!! 

Map<String, String> valuesMap = new HashMap<String, String>(); 
valuesMap.put("firstName", "ram"); 
valuesMap.put("lastName", "Kumar"); 
StrSubstitutor sub = new StrSubstitutor(valuesMap); 
String message = sub.replace(WelcomeMessage);