1 /* 2 * $Id: LoadMessagesTag.java 471754 2006-11-06 14:55:09Z husted $ 3 * 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 package org.apache.struts.faces.taglib; 23 24 25 import java.util.Locale; 26 27 import javax.faces.context.FacesContext; 28 29 import javax.servlet.jsp.PageContext; 30 import javax.servlet.jsp.tagext.TagSupport; 31 32 import org.apache.struts.Globals; 33 import org.apache.struts.faces.util.MessagesMap; 34 import org.apache.struts.util.MessageResources; 35 36 37 /** 38 * <p>Tag that exposes a specified <code>MessageResources</code> instance 39 * as <code>Map</code>, so that the embedded messages may be retrieved via 40 * value binding expressions.</p> 41 */ 42 43 public class LoadMessagesTag extends TagSupport { 44 45 46 // ---------------------------------------------------------- Tag Attributes 47 48 49 /** 50 * <p>The name of the <code>MessageResources</code> to expose, or 51 * <code>null</code> for the default <code>MessageResources</code> 52 * for this application module.</p> 53 */ 54 private String messages = null; 55 public void setMessages(String messages) { 56 this.messages = messages; 57 } 58 59 60 /** 61 * <p>The request attribute key under which a <code>Map</code> 62 * will be exposed.</p> 63 */ 64 private String var = null; 65 public void setVar(String var) { 66 this.var = var; 67 } 68 69 70 // ------------------------------------------------------------- Tag Methods 71 72 73 /** 74 * <p>Expose a <code>Map</code> wrapping the specified 75 * <code>MessageResources</code> instance, for the <code>Locale</code> 76 * specified in the view root component of the current view.</p> 77 */ 78 public int doStartTag() { 79 80 // Acquire the Locale to be wrapped 81 Locale locale = 82 FacesContext.getCurrentInstance().getViewRoot().getLocale(); 83 84 // Acquire the MessageResources to be wrapped 85 MessageResources messages = null; 86 if (this.messages == null) { 87 messages = (MessageResources) 88 pageContext.getAttribute(Globals.MESSAGES_KEY, 89 PageContext.REQUEST_SCOPE); 90 if (messages == null) { 91 messages = (MessageResources) 92 pageContext.getAttribute(Globals.MESSAGES_KEY, 93 PageContext.APPLICATION_SCOPE); 94 } 95 } else { 96 messages = (MessageResources) 97 pageContext.getAttribute(this.messages, 98 PageContext.APPLICATION_SCOPE); 99 } 100 101 // Expose a Map instance under the specified request attribute key 102 pageContext.setAttribute(var, 103 new MessagesMap(messages, locale), 104 PageContext.REQUEST_SCOPE); 105 106 // Skip the body of this tag (if any) 107 return (SKIP_BODY); 108 109 } 110 111 112 /** 113 * <p>Release any resources allocated by this tag instance.</p> 114 */ 115 public void release() { 116 117 this.messages = null; 118 this.var = null; 119 120 } 121 122 123 }