1 /* 2 * $Id$ 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.component; 23 24 import jakarta.el.ValueExpression; 25 import jakarta.faces.component.UIOutput; 26 import jakarta.faces.context.FacesContext; 27 28 /** 29 * Custom component to load a {@code MessagesMap}. 30 */ 31 public class LoadMessagesComponent extends UIOutput { 32 33 34 // ------------------------------------------------------------ Constructors 35 36 37 /** 38 * Create a new {@link LoadMessagesComponent} with default properties. 39 */ 40 public LoadMessagesComponent() { 41 super(); 42 setRendererType("org.apache.struts.faces.LoadMessages"); 43 } 44 45 46 // ------------------------------------------------------ Instance Variables 47 48 49 /** 50 * The name of the {@code MessageResources} to expose, or 51 * {@code null} for the default {@code MessageResources} 52 * for this application module. 53 */ 54 private String messages = null; 55 56 /** 57 * The request attribute key under which the 58 * {@code MessagesMap} will be exposed. 59 */ 60 private String var = null; 61 62 63 // ---------------------------------------------------- Component Properties 64 65 66 /** 67 * Return the component family to which this component belongs. 68 */ 69 public String getFamily() { 70 return "org.apache.struts.faces.LoadMessages"; 71 } 72 73 /** 74 * Gets the name of the {@code MessageResources} to expose, 75 * or {@code null} for the default {@code MessageResources} 76 * for this application module. 77 * 78 * @return the name of the {@code MessageResources} 79 */ 80 public String getMessages() { 81 if (messages != null) { 82 return messages; 83 } 84 ValueExpression vb = getValueExpression("messages"); 85 if (vb != null) { 86 return (String) vb.getValue(getFacesContext().getELContext()); 87 } else { 88 return null; 89 } 90 } 91 92 /** 93 * Sets the name of the {@code MessageResources} to expose, 94 * or {@code null} for the default {@code MessageResources} 95 * for this application module. 96 * 97 * @param messages the name of the {@code MessageResources} 98 */ 99 public void setMessages(String messages) { 100 this.messages = messages; 101 } 102 103 /** 104 * Gets the request attribute key under which the 105 * {@code MessagesMap} will be exposed. 106 * 107 * @return the request attribute key 108 */ 109 public String getVar() { 110 if (var != null) { 111 return var; 112 } 113 ValueExpression vb = getValueExpression("var"); 114 if (vb != null) { 115 return (String) vb.getValue(getFacesContext().getELContext()); 116 } else { 117 return null; 118 } 119 } 120 121 /** 122 * Sets the request attribute key under which the 123 * {@code MessagesMap} will be exposed. 124 * 125 * @param var the request attribute key 126 */ 127 public void setVar(String var) { 128 this.var = var; 129 } 130 131 132 // ---------------------------------------------------- StateManager Methods 133 134 135 /** 136 * Restore the state of this component. 137 * 138 * @param context {@code FacesContext} for the current request 139 * @param state State object from which to restore our state 140 */ 141 public void restoreState(FacesContext context, Object state) { 142 Object values[] = (Object[]) state; 143 super.restoreState(context, values[0]); 144 messages = (String) values[1]; 145 var = (String) values[2]; 146 } 147 148 /** 149 * Save the state of this component. 150 * 151 * @param context {@code FacesContext} for the current request 152 */ 153 public Object saveState(FacesContext context) { 154 Object values[] = new Object[3]; 155 values[0] = super.saveState(context); 156 values[1] = messages; 157 values[2] = var; 158 return values; 159 } 160 }