001/* 002 Licensed to the Apache Software Foundation (ASF) under one 003 or more contributor license agreements. See the NOTICE file 004 distributed with this work for additional information 005 regarding copyright ownership. The ASF licenses this file 006 to you under the Apache License, Version 2.0 (the 007 "License"); you may not use this file except in compliance 008 with the License. You may obtain a copy of the License at 009 010 http://www.apache.org/licenses/LICENSE-2.0 011 012 Unless required by applicable law or agreed to in writing, 013 software distributed under the License is distributed on an 014 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 KIND, either express or implied. See the License for the 016 specific language governing permissions and limitations 017 under the License. 018 */ 019package org.apache.wiki.tags; 020 021import javax.servlet.jsp.tagext.BodyContent; 022import javax.servlet.jsp.tagext.BodyTagSupport; 023import javax.servlet.jsp.tagext.Tag; 024 025/** 026 * ParamTag submits name-value pairs to the first enclosing 027 * ParamHandler instance. Name and value are strings, and can 028 * be given as tag attributes, or alternatively the value can be 029 * given as the body contents of this tag. 030 * <p> 031 * The name-value pair is passed to the closest containing 032 * ancestor tag that implements ParamHandler. 033 */ 034public class ParamTag 035 extends BodyTagSupport 036{ 037 038 private static final long serialVersionUID = -4671059568218551633L; 039 private String m_name; 040 private String m_value; 041 042 /** 043 * {@inheritDoc} 044 */ 045 @Override 046 public void release() 047 { 048 m_name = m_value = null; 049 } 050 051 /** 052 * Set the name of the parameter to transfer. 053 * 054 * @param s The name. 055 */ 056 public void setName(final String s ) 057 { 058 m_name = s; 059 } 060 061 /** 062 * Set the value of the parameter to transfer. 063 * 064 * @param s The value. 065 */ 066 public void setValue(final String s ) 067 { 068 m_value = s; 069 } 070 071 /** 072 * {@inheritDoc} 073 */ 074 @Override 075 public int doEndTag() 076 { 077 Tag t; 078 do 079 { 080 t = getParent(); 081 } while (t != null && !(t instanceof ParamHandler)); 082 083 if( t != null ) 084 { 085 String val = m_value; 086 if( val == null ) 087 { 088 final BodyContent bc = getBodyContent(); 089 if( bc != null ) 090 { 091 val = bc.getString(); 092 } 093 } 094 if( val != null ) 095 { 096 ((ParamHandler)t).setContainedParameter( m_name, val ); 097 } 098 } 099 100 101 return EVAL_PAGE; 102 } 103}