001// Copyright 2004, 2005 The Apache Software Foundation 002// 003// Licensed under the Apache License, Version 2.0 (the "License"); 004// you may not use this file except in compliance with the License. 005// You may obtain a copy of the License at 006// 007// http://www.apache.org/licenses/LICENSE-2.0 008// 009// Unless required by applicable law or agreed to in writing, software 010// distributed under the License is distributed on an "AS IS" BASIS, 011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012// See the License for the specific language governing permissions and 013// limitations under the License. 014 015package org.apache.tapestry.form; 016 017import org.apache.hivemind.ApplicationRuntimeException; 018import org.apache.tapestry.IActionListener; 019import org.apache.tapestry.IForm; 020import org.apache.tapestry.IMarkupWriter; 021import org.apache.tapestry.IRequestCycle; 022import org.apache.tapestry.listener.ListenerInvoker; 023import org.apache.tapestry.services.DataSqueezer; 024 025/** 026 * Implements a hidden field within a {@link Form}. [ <a 027 * href="../../../../../ComponentReference/Hidden.html">Component Reference </a>] 028 * 029 * @author Howard Lewis Ship 030 * @author Paul Ferraro 031 */ 032public abstract class Hidden extends AbstractFormComponent 033{ 034 /** 035 * Returns false. 036 */ 037 038 protected boolean getCanTakeFocus() 039 { 040 return false; 041 } 042 043 /** 044 * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter, 045 * org.apache.tapestry.IRequestCycle) 046 */ 047 protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle) 048 { 049 IForm form = getForm(); 050 String externalValue = null; 051 052 if (getEncode()) 053 { 054 Object value = getValue(); 055 056 try 057 { 058 externalValue = getDataSqueezer().squeeze(value); 059 } 060 catch (Exception e) 061 { 062 throw new ApplicationRuntimeException(e.getMessage(), this, null, e); 063 } 064 } 065 else 066 externalValue = (String) getBinding("value").getObject(String.class); 067 068 String id = getClientId(); 069 070 form.addHiddenValue(getName(), id, externalValue); 071 } 072 073 /** 074 * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IRequestCycle) 075 */ 076 protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle) 077 { 078 String parameter = cycle.getParameter(getName()); 079 080 Object value = parameter; 081 082 if (getEncode()) 083 { 084 try 085 { 086 value = getDataSqueezer().unsqueeze(parameter); 087 } 088 catch (Exception ex) 089 { 090 throw new ApplicationRuntimeException(ex.getMessage(), this, null, ex); 091 } 092 } 093 094 // A listener is not always necessary ... it's easy to code 095 // the synchronization as a side-effect of the accessor method. 096 097 setValue(value); 098 099 getListenerInvoker().invokeListener(getListener(), this, cycle); 100 } 101 102 /** @since 2.2 * */ 103 public abstract DataSqueezer getDataSqueezer(); 104 105 public abstract Object getValue(); 106 107 public abstract void setValue(Object value); 108 109 public abstract IActionListener getListener(); 110 111 /** 112 * Injected. 113 * 114 * @since 4.0 115 */ 116 117 public abstract ListenerInvoker getListenerInvoker(); 118 119 /** 120 * Returns false. Hidden components are never disabled. 121 * 122 * @since 2.2 123 */ 124 public boolean isDisabled() 125 { 126 return false; 127 } 128 129 /** 130 * Returns true if the compent encodes object values using a 131 * {@link org.apache.tapestry.util.io.DataSqueezerImpl}, false if values are always Strings. 132 * 133 * @since 2.2 134 */ 135 public abstract boolean getEncode(); 136}