/* Copyright 2005-2006 Tim Fennell
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.sourceforge.stripes.tag;
import javax.servlet.jsp.JspException;
/**
* Tag class that implements an input tag of type password. Defines one attribute in addition
* to those provided by the HTML tag. If {@code repopulate} is set then the password tag will
* behave just like the text tag, and will repopulate values on error and during wizard flows. If
* {@code repopulate} is not set, or is set to false then values will not be re-populated, but
* initial/default values supplied to the tag on the JSP will be used.
*
* @author Tim Fennell
* @since Stripes 1.1
*/
public class InputPasswordTag extends InputTextTag {
private boolean repopulate = false;
/** Sets whether or not the tag will repopulate the value if one is present. */
public void setRepopulate(boolean repopulate) { this.repopulate = repopulate; }
/** Returns true if the tag will repopulate values, false otherwise. */
public boolean getRepopulate() { return repopulate; }
/**
* Constructs a new tag for generating password fields. Delegates to InputTextTag which it
* extends, and then overrides the type of input field to "password".
*/
public InputPasswordTag() {
getAttributes().put("type", "password");
}
@Override
public int doEndInputTag() throws JspException {
if (this.repopulate) {
// If repopulate is set, delegate to the parent input text tag
return super.doEndInputTag();
}
else {
// Else just figure out if there is a default value and use it
String body = getBodyContentAsString();
// Figure out where to pull the value from
if (body != null) {
getAttributes().put("value", body);
}
else if (getValue() != null) {
getAttributes().put("value", format(getValue()));
}
set("maxlength", getEffectiveMaxlength());
writeSingletonTag(getPageContext().getOut(), "input");
// Restore the original state before we mucked with it
getAttributes().remove("value");
return EVAL_PAGE;
}
}
}