前面按照别人的想法做了一个,这次按照自己的想法自己做了一个。
tml如下
<t:form t:id="locale"> <t:loop source="LocalesSource" value="selectedLocale" formState="ITERATION"> <t:test server="currentLocale" client="${selectedLocale.locale.language}"> <img src="${selectedLocale.asset}" class="currentFlag" /> <p:else> <a t:type="actionLink" t:id="changeLocale" context="${selectedLocale.locale.language}" href="#"> <img src="${selectedLocale.asset}" class="notCurrentFlag" /> </a> </p:else> </t:test> </t:loop> <div class="message"> ${message:greeting_message} </div> </t:form>
java如下:
public class LocaleSwitcher2 { @Inject @Property @Symbol(SymbolConstants.SUPPORTED_LOCALES) private String locales; @Inject private PersistentLocale persistentLocale; @Property private LocaleBean selectedLocale; @Inject @Path("context:images/country_zh.png") private Asset assetZh; @Inject @Path("context:images/country_it.png") private Asset assetIt; @Inject @Path("context:images/country_ja.png") private Asset assetJa; @Inject @Path("context:images/country_en.png") private Asset assetEn; public List<LocaleBean> getLocalesSource() { String[] countrys = locales.split(","); List<LocaleBean> localeList = new ArrayList<LocaleBean>(); for (String country : countrys) { LocaleBean addBean = new LocaleBean(); addBean.setLocale(new Locale(country)); if (country.equalsIgnoreCase("en")) { addBean.setAsset(assetEn); } else if (country.equalsIgnoreCase("ja")) { addBean.setAsset(assetJa); } else if (country.equalsIgnoreCase("zh")) { addBean.setAsset(assetZh); } else if (country.equalsIgnoreCase("it")) { addBean.setAsset(assetIt); } else { addBean.setAsset(assetEn); } localeList.add(addBean); } return localeList; } public ValueEncoder<Locale> getLocaleEncoder() { return new ValueEncoder<Locale>() { public String toClient(Locale locale) { return locale.getLanguage(); } public Locale toValue(String language) { return new Locale(language); } }; } void onActionFromChangeLocale(String language) { persistentLocale.set(new Locale(language)); } public String getCurrentLocale() { return persistentLocale.get().getLanguage(); } }
public class LocaleBean { private Locale locale; private Asset asset; public Locale getLocale() { return locale; } public void setLocale(Locale locale) { this.locale = locale; } public Asset getAsset() { return asset; } public void setAsset(Asset asset) { this.asset = asset; } }
public class Test extends AbstractConditional { @Parameter(required = true) private String client; @Parameter(required = true) private String server; @Parameter private boolean negate; @Override protected boolean test() { return client.equalsIgnoreCase(server); } }
效果图: