JdbcMapper/beehive-netui-tags/src/main/java/org/apache/beehive/netui/tags/naming/FormDataNameInterceptor.java

76 lines
3.1 KiB
Java

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*
* $Header:$
*/
package org.apache.beehive.netui.tags.naming;
import org.apache.beehive.netui.script.ExpressionEvaluationException;
import org.apache.beehive.netui.script.ExpressionEvaluator;
import org.apache.beehive.netui.script.ExpressionEvaluatorFactory;
import org.apache.beehive.netui.util.logging.Logger;
import javax.servlet.jsp.tagext.Tag;
/**
* A {@link INameInterceptor} that qualifies all non-expression attributes
* that are expected to be expressions into valid
* expressions. This conversion is for Struts compatability;
* In Struts, the "property" property is used to specify which
* property on the action form should be rendered in a tag's
* HTML. These attributes are converted into expressions
* by qualifying them into the <code>actionForm</code> binding
* context.
* <br/>
* <br/>
* For example, the <code>dataSource</code> attribute on a text box
* tag would be qualified into the <code>actionForm</code> context
* if the attribute was not an expression.
*/
public class FormDataNameInterceptor
implements INameInterceptor
{
private static final Logger logger = Logger.getInstance(FormDataNameInterceptor.class);
/**
* Qualify the name of a NetUI JSP tag into the "actionForm" data binding context.
* This feature is used to convert non-expression tag names, as those used in Struts,
* into actionForm expressions that NetUI consumes.
* @param name the name to qualify into the actionForm binding context. If this is "foo", the returned value
* is {actionForm.foo}
* @return the qualified name or <code>null</code> if an error occurred
*/
public String rewriteName(String name, Tag currentTag)
throws ExpressionEvaluationException
{
ExpressionEvaluator eval = ExpressionEvaluatorFactory.getInstance();
try {
if (!eval.isExpression(name))
return eval.qualify("actionForm", name);
return name;
}
catch (Exception e) {
if (logger.isErrorEnabled())
logger.error("Could not qualify name \"" + name + "\" into the actionForm binding context.", e);
// return the Struts name. This should cause regular Struts databinding to execute so this property will
// be updated anyway.
return name;
}
}
}