类 LinkTool
- 所有已实现的接口:
Cloneable
- 直接已知子类:
LinkTool
The LinkTool provides many methods to work with URIs and can help you:
- construct full URIs (opaque, absolute or relative)
- encode and decode URLs (part or whole)
- retrieve path info for the current request
- and more..
This GenericTools (i.e. non-servlet based) version of LinkTool is largely based upon the same API and behavior as the older VelocityView version, with a few differences, particularly in internal representation and query handling. You can expect that in the future work will be done to more closely align the APIs. It is likely that the VelocityView version will become a subclass of this version that adds on servlet-awareness and related features. For now, though, they are entirely separate but similar tools.
The LinkTool is somewhat special in that nearly all public methods return a new instance of LinkTool. This facilitates greatly the repeated use of the LinkTool in Velocity and leads to an elegant syntax.
Template example(s): #set( $base = $link.relative('MyPage.vm').anchor('view') ) <a href="$base.param('select','this')">this</a> <a href="$base.param('select','that')">that</a> Toolbox configuration: <tools> <toolbox scope="request"> <tool class="org.apache.velocity.tools.generic.LinkTool" uri="http://velocity.apache.org/tools/devel/"/> </toolbox> </tools>
- 从以下版本开始:
- VelocityTools 2.0
- 版本:
- $Id: LinkTool.java 601976 2007-12-07 03:50:51Z nbubna $
- 作者:
- Nathan Bubna
-
字段概要
字段修饰符和类型字段说明static final String
protected boolean
protected String
static final String
static final String
static final String
static final String
protected boolean
protected String
static final String
protected String
static final String
static final String
Standard HTML delimiter for query data ('&')protected org.apache.velocity.runtime.log.Log
protected boolean
protected String
static final String
protected int
static final String
protected Map
static final String
protected String
protected String
static final String
static final String
protected final LinkTool
static final String
protected String
static final String
static final String
static final String
XHTML delimiter for query data ('&')从类继承的字段 org.apache.velocity.tools.generic.SafeConfig
LOCK_CONFIG_KEY, OLD_LOCK_CONFIG_KEY, SAFE_MODE_KEY
-
构造器概要
构造器 -
方法概要
修饰符和类型方法说明absolute()
Returns a copy of this LinkTool instance that hassetForceRelative(boolean)
set to false and sets the scheme to the "http" if no scheme has been set yet.Returns a copy of the link with the specified URI reference either used as or converted to an absolute (non-relative) URI reference.private void
Returns a copy of the link with the specified anchor to be added to the end of the generated hyperlink.Appends the given value to the end of the current path value.Appends a new key=value pair to the existing query data.protected void
appendAsArray
(StringBuilder out, Object key, Object[] arr) private void
appendParam
(String key, Object value) void
appendPath
(Object obj) UsescombinePath(java.lang.String, java.lang.String)
to add the specified value to the currentgetPath()
value.void
appendQuery
(Object obj) UsescombineQuery(java.lang.String, java.lang.String)
to append the specified value to the currentgetQuery()
value.protected String
combinePath
(String start, String end) If end is null, this will return start and vice versa.protected String
combineQuery
(String current, String add) If the second param is null or empty, this will simply return the first and vice versa.protected void
configure
(ValueParser props) Does the actual configuration.protected URI
Tries to create a URI from the current port, opacity, scheme, userInfo, host, path, query and fragment set for this instance, using theURI
constructor that is appropriate to the opacity.protected final void
protected final void
Delegates decoding of the specified url content toURLDecoder.decode(java.lang.String)
using the configured character encoding.protected String
This is an ugly (but fast) hack that's needed because URI encodes things that we don't need encoded while not encoding things that we do need encoded.Returns a new LinkTool instance with the path set to the result ofgetDirectory()
and the query and fragment set to null.protected LinkTool
Equivalent to clone, but with no checked exceptions.protected LinkTool
duplicate
(boolean deep) Equivalent to clone, but with no checked exceptions.Delegates encoding of the specified url content toURLEncoder.encode(java.lang.String)
using the configured character encoding.boolean
This instance is considered equal to any LinkTool instance whose toString() method returns a String equal to that returned by this instance's toString()Returns the anchor (internal document reference) set for this link.boolean
Returns true ifparam(Object,Object)
appends values; false if the method overwrites existing value(s) for the specified key.Returns the full URI of this template without any query data.Returns the configured charset used by theencode(java.lang.Object)
anddecode(java.lang.Object)
methods.At this level, this only returns the result ofgetDirectory()
.Returns the directory stack in the setgetPath()
value, by just trimming off all that follows the last "/".getFile()
Returns the last section of the path, which is all that follows the final "/".getHost()
Return the host value for this instance.getPath()
Returns the current path value for this instance.getPort()
Returns the port value, if any.getQuery()
Returns the current query as a string, if any.getRoot()
Returns the "root" for this URI, if it has one.Return the scheme value for this instance.getSelf()
getUri()
If the tool is not in "safe mode"--which it is by default-- this will return theURI
representation of this instance, if any.getUser()
Returns theURI.getUserInfo()
value for this instance.protected void
handleParamsBoolean
(boolean keep) In this class, this method ignores true values.int
hashCode()
Returns the hash code for the result of toString().Returns a new instance with the specified value set as its host.insecure()
Returns a new instance with the scheme set to "http".boolean
Returns true if this instance has a scheme value and is not being forced to create relative URIs.boolean
isOpaque()
Returns true if this instance represents an opaque URI.boolean
Returns true if this instance is being forced to return relative URIs or has a null scheme value.boolean
isSecure()
Returns true if this instance's scheme is "https".boolean
isXHTML()
Returns true if the query delimiter used by this instance is using&
as the delimiter for query data pairs or just using&
.protected String
normalizeQuery
(String qs) Adds a key=value pair to the query data.This method can do two different things.parseQuery
(String query) UsesnormalizeQuery(java.lang.String)
to make all delimiters in the specified query string match the current query delimiter and then usesparseQuery(String,String)
to parse it according to that same delimiter.parseQuery
(String query, String queryDelim) This will use the specified query delimiter to parse the specified query string into a map of keys to values.Returns a new instance with the specified value set as its path.Returns a new instance with the specified value set as its port number.private void
Sets the specified value as the current query data, after normalizing the pair delimiters.relative()
Returns a copy of this LinkTool instance that hassetForceRelative(boolean)
set to true.Returns a copy of the link with the specified directory-relative URI reference set as the end of the path andsetForceRelative(boolean)
set to true.Returns a new LinkTool instance that has any value(s) under the specified key removed from the query data.removeParam
(Object key) Removes the query pair(s) with the specified key from the query data and returns the remove value(s), if any.root()
Returns a new LinkTool instance that represents the "root" of the current one, if it has one.Returns a new instance with the specified value set as its scheme.secure()
Returns a new instance with the scheme set to "https".Sets a new key=value pair to the existing query data, overwriting any previous pair(s) that have the same key.void
setAppendParams
(boolean addParams) Sets whether or not thesetParam(java.lang.Object, java.lang.Object, boolean)
method will override existing query values for the same key or simply append the new value to a list of existing values.void
setCharacterEncoding
(String chrst) void
setForceRelative
(boolean forceRelative) Sets whether or not thecreateURI()
method should ignore the scheme, user, port and host values for non-opaque URIs, thus makingtoString()
print the link as a relative one, not an absolute one.void
setFragment
(Object obj) Sets the anchor for this instance and treats empty strings like null.protected boolean
setFromURI
(Object obj) If the specified value is null, this will set the scheme, userInfo, host, port, path, query, and fragment all to their null-equivalent values.void
void
If there is no existing value for this key in the query, it will simply add it and its value to the query.void
If append is false, this simply delegates tosetQuery(java.lang.Object)
.void
If this instance is not opaque and the specified value does not start with a '/' character, then that will be prepended automatically.void
If the specified object is null, this will set the port value to -1 to indicate that.void
If the specified value is null, it will set the query to null.void
This will treat empty strings like null values and will trim any trailing ':' character.void
setUserInfo
(Object obj) void
setXHTML
(boolean xhtml) Controls the delimiter used for separating query data pairs.protected String
Turns the specified key and value into a properly encoded query pair string.Converts the map of keys to values into a query string.toString()
Returns the full URI reference that's been built with this tool, including the query string and anchor, e.g.protected URI
Turns the specified object into a string and thereby a URI.Returns a copy of the link with the given URI reference set.Returns a new instance with the specified value set as its user info.从类继承的方法 org.apache.velocity.tools.generic.SafeConfig
configure, isConfigLocked, isSafeMode, setLockConfig, setSafeMode
-
字段详细资料
-
HTML_QUERY_DELIMITER
Standard HTML delimiter for query data ('&')- 另请参阅:
-
XHTML_QUERY_DELIMITER
XHTML delimiter for query data ('&')- 另请参阅:
-
APPEND_PARAMS_KEY
- 另请参阅:
-
FORCE_RELATIVE_KEY
- 另请参阅:
-
DEFAULT_CHARSET
- 另请参阅:
-
DEFAULT_SCHEME
- 另请参阅:
-
SECURE_SCHEME
- 另请参阅:
-
URI_KEY
- 另请参阅:
-
SCHEME_KEY
- 另请参阅:
-
USER_KEY
- 另请参阅:
-
HOST_KEY
- 另请参阅:
-
PORT_KEY
- 另请参阅:
-
PATH_KEY
- 另请参阅:
-
QUERY_KEY
- 另请参阅:
-
FRAGMENT_KEY
- 另请参阅:
-
CHARSET_KEY
- 另请参阅:
-
XHTML_MODE_KEY
- 另请参阅:
-
LOG
protected org.apache.velocity.runtime.log.Log LOG -
scheme
-
user
-
host
-
port
protected int port -
path
-
query
-
fragment
-
charset
-
queryDelim
-
appendParams
protected boolean appendParams -
forceRelative
protected boolean forceRelative -
opaque
protected boolean opaque -
self
-
-
构造器详细资料
-
LinkTool
public LinkTool()Default constructor. Tool typically is configured before use.
-
-
方法详细资料
-
debug
-
debug
-
configure
从类复制的说明:SafeConfig
Does the actual configuration. This is protected, so subclasses may share the same ValueParser and call configure at any time, while preventing templates from doing so when configure(Map) is locked.- 覆盖:
configure
在类中SafeConfig
-
duplicate
Equivalent to clone, but with no checked exceptions. If for some unfathomable reason clone() doesn't work, this will throw a RuntimeException. -
duplicate
Equivalent to clone, but with no checked exceptions. If for some unfathomable reason clone() doesn't work, this will throw a RuntimeException. If doing a deep clone, then the parameter Map will also be cloned. -
setCharacterEncoding
-
setXHTML
public void setXHTML(boolean xhtml) Controls the delimiter used for separating query data pairs. By default, the standard '&' character is used.
This is not exposed to templates as this decision is best not made at that level.
Subclasses may easily override the init() method to set this appropriately and then call super.init()
- 参数:
xhtml
- if true, the XHTML query data delimiter ('&') will be used. if false, then '&' will be used.- 另请参阅:
-
setAppendParams
public void setAppendParams(boolean addParams) Sets whether or not thesetParam(java.lang.Object, java.lang.Object, boolean)
method will override existing query values for the same key or simply append the new value to a list of existing values. -
setForceRelative
public void setForceRelative(boolean forceRelative) Sets whether or not thecreateURI()
method should ignore the scheme, user, port and host values for non-opaque URIs, thus makingtoString()
print the link as a relative one, not an absolute one. NOTE: usingabsolute()
,absolute(Object)
,relative()
, orrelative(Object)
will alter this setting accordingly on the new instances they return. -
setScheme
This will treat empty strings like null values and will trim any trailing ':' character. -
setUserInfo
-
setHost
-
setPort
If the specified object is null, this will set the port value to -1 to indicate that. If it is non-null and cannot be converted to an integer, then it will be set to -2 to indicate an error. -
setPath
If this instance is not opaque and the specified value does not start with a '/' character, then that will be prepended automatically. -
appendPath
UsescombinePath(java.lang.String, java.lang.String)
to add the specified value to the currentgetPath()
value. If the specified value is null or this instance is opaque, then this is a no-op. -
combinePath
If end is null, this will return start and vice versa. If neither is null, this will append the end to the start, making sure that there is only one '/' character between the two values. -
setQuery
If the specified value is null, it will set the query to null. If a Map, it will copy all those values into a new LinkedHashMap and replace any current query value with that. If it is a String, it will useparseQuery(String)
to parse it into a map of keys to values. -
normalizeQuery
-
toQuery
Converts the map of keys to values into a query string. -
appendQuery
UsescombineQuery(java.lang.String, java.lang.String)
to append the specified value to the currentgetQuery()
value. -
setParam
If there is no existing value for this key in the query, it will simply add it and its value to the query. If the key already is present in the query and append is true, this will add the specified value to those already under that key. IfappendParams
is false, this will override the existing values with the specified new value. -
appendParam
-
putParam
-
addToList
-
setParams
If append is false, this simply delegates tosetQuery(java.lang.Object)
. Otherwise, if the specified object is null, it does nothing. If the object is not a Map, it will turn it into a String and useparseQuery(java.lang.String)
to parse it. Once it is a Map, it will iterate through the entries appending each key/value to the current query data. -
removeParam
Removes the query pair(s) with the specified key from the query data and returns the remove value(s), if any. -
handleParamsBoolean
protected void handleParamsBoolean(boolean keep) In this class, this method ignores true values. If passed a false value, it will callsetQuery(java.lang.Object)
with a null value to clear all query data. -
combineQuery
If the second param is null or empty, this will simply return the first and vice versa. Otherwise, it will trim any '?' at the start of the second param and any '&' or '&' at the end of the first one, then combine the two, making sure that they are separated by only one delimiter. -
toQuery
Turns the specified key and value into a properly encoded query pair string. If the value is an array or List, then this will create a delimited string of query pairs, reusing the same key for each of the values separately. -
appendAsArray
-
parseQuery
UsesnormalizeQuery(java.lang.String)
to make all delimiters in the specified query string match the current query delimiter and then usesparseQuery(String,String)
to parse it according to that same delimiter. -
parseQuery
This will use the specified query delimiter to parse the specified query string into a map of keys to values. If there are multiple query pairs in the string that have the same key, then the values will be combined into a single List value associated with that key. -
setFragment
Sets the anchor for this instance and treats empty strings like null. -
setFromURI
If the specified value is null, this will set the scheme, userInfo, host, port, path, query, and fragment all to their null-equivalent values. Otherwise, this will convert the specified object into aURI
, then those same values from the URI object to this instance. -
toURI
Turns the specified object into a string and thereby a URI. -
createURI
Tries to create a URI from the current port, opacity, scheme, userInfo, host, path, query and fragment set for this instance, using theURI
constructor that is appropriate to the opacity. -
getCharacterEncoding
Returns the configured charset used by theencode(java.lang.Object)
anddecode(java.lang.Object)
methods. -
isXHTML
public boolean isXHTML()Returns true if the query delimiter used by this instance is using&
as the delimiter for query data pairs or just using&
. -
getAppendParams
public boolean getAppendParams()Returns true ifparam(Object,Object)
appends values; false if the method overwrites existing value(s) for the specified key. -
scheme
Returns a new instance with the specified value set as its scheme. -
secure
Returns a new instance with the scheme set to "https". -
insecure
Returns a new instance with the scheme set to "http". -
getScheme
Return the scheme value for this instance. -
isSecure
public boolean isSecure()Returns true if this instance's scheme is "https". -
isOpaque
public boolean isOpaque()Returns true if this instance represents an opaque URI.- 另请参阅:
-
user
Returns a new instance with the specified value set as its user info. -
getUser
Returns theURI.getUserInfo()
value for this instance. -
host
Returns a new instance with the specified value set as its host. If no scheme has yet been set, the new instance will also have its scheme set to theDEFAULT_SCHEME
(http). -
getHost
Return the host value for this instance. -
port
Returns a new instance with the specified value set as its port number. If the value cannot be parsed into an integer, the returned instance will always return null fortoString()
and othercreateURI()
-dependent methods to alert the user to the error. -
getPort
Returns the port value, if any. -
path
Returns a new instance with the specified value set as its path. -
getPath
Returns the current path value for this instance. -
append
Appends the given value to the end of the current path value. -
getDirectory
Returns the directory stack in the setgetPath()
value, by just trimming off all that follows the last "/". -
getFile
Returns the last section of the path, which is all that follows the final "/". -
getRoot
Returns the "root" for this URI, if it has one. This does not stick close to URI dogma and will try to insert the default scheme if there is none, and will return null if there is no host or if there was an error when the port value was last set. It will return null for any opaque URLs as well, as those have no host or port. -
root
Returns a new LinkTool instance that represents the "root" of the current one, if it has one. This essentially callsabsolute()
and sets the path, query, and fragment to null on the returned instance.- 另请参阅:
-
directory
Returns a new LinkTool instance with the path set to the result ofgetDirectory()
and the query and fragment set to null. -
isRelative
public boolean isRelative()Returns true if this instance is being forced to return relative URIs or has a null scheme value. -
relative
Returns a copy of this LinkTool instance that hassetForceRelative(boolean)
set to true. -
relative
Returns a copy of the link with the specified directory-relative URI reference set as the end of the path and
Example:setForceRelative(boolean)
set to true. If the specified relative path is null, that is treated the same as an empty path.
<a href='$link.relative("/login/index.vm")'>Login Page</a>
produces something like<a href="/myapp/login/index.vm">Login Page</a>
- 参数:
obj
- A directory-relative URI reference (e.g. file path in current directory)- 返回:
- a new instance of LinkTool with the specified changes
- 另请参阅:
-
getContextPath
At this level, this only returns the result ofgetDirectory()
. It is here as an extension hook for subclasses to change the "context" for relative links. -
isAbsolute
public boolean isAbsolute()Returns true if this instance has a scheme value and is not being forced to create relative URIs. -
absolute
Returns a copy of this LinkTool instance that hassetForceRelative(boolean)
set to false and sets the scheme to the "http" if no scheme has been set yet. -
absolute
Returns a copy of the link with the specified URI reference either used as or converted to an absolute (non-relative) URI reference. Unless the specified URI contains a query or anchor, those values will not be overwritten when using this method.
Example:
<a href='$link.absolute("login/index.vm")'>Login Page</a>
produces something like
<a href="http://myserver.net/myapp/login/index.vm">Login Page</a>
;
<a href='$link.absolute("/login/index.vm")'>Login Page</a>
produces something like
<a href="http://myserver.net/login/index.vm">Login Page</a>
;
and
<a href='$link.absolute("http://theirserver.com/index.jsp")'>Their, Inc.</a>
produces something like
<a href="http://theirserver.net/index.jsp">Their, Inc.</a>
- 参数:
obj
- A root-relative or context-relative path or an absolute URI.- 返回:
- a new instance of LinkTool with the specified path or URI
- 另请参阅:
-
uri
Returns a copy of the link with the given URI reference set. Few changes are applied to the given URI reference. The URI reference can be absolute, server-relative, relative and may contain query parameters. This method will overwrite all previous settings for scheme, host port, path, query and anchor.
- 参数:
uri
- URI reference to set- 返回:
- a new instance of LinkTool
-
getUri
If the tool is not in "safe mode"--which it is by default-- this will return theURI
representation of this instance, if any.- 另请参阅:
-
getBaseRef
Returns the full URI of this template without any query data. e.g.http://myserver.net/myapp/stuff/View.vm
Note! The returned String will not represent any URI reference or query data set for this LinkTool. A typical application of this method is with the HTML base tag. For example:<base href="$link.baseRef">
-
query
Sets the specified value as the current query data, after normalizing the pair delimiters. This overrides any existing query. -
getQuery
Returns the current query as a string, if any. -
param
Adds a key=value pair to the query data. Whether this new query pair is appended to the current query or overwrites any previous pair(s) with the same key is controlled by the
getAppendParams()
value. The default behavior is to append.- 参数:
key
- key of new query parametervalue
- value of new query parameter- 返回:
- a new instance of LinkTool
-
append
Appends a new key=value pair to the existing query data.- 参数:
key
- key of new query parametervalue
- value of new query parameter- 返回:
- a new instance of LinkTool
-
set
Sets a new key=value pair to the existing query data, overwriting any previous pair(s) that have the same key.- 参数:
key
- key of new query parametervalue
- value of new query parameter- 返回:
- a new instance of LinkTool
-
remove
Returns a new LinkTool instance that has any value(s) under the specified key removed from the query data.- 参数:
key
- key of the query pair(s) to be removed- 返回:
- a new instance of LinkTool
-
params
This method can do two different things. If you pass in a boolean, it will create a new LinkTool duplicate and callhandleParamsBoolean(boolean)
on it. In this class, true values do nothing (subclasses may have use for them), but false values will clear out all params in the query for that instance. If you pass in a query string or a Map of parameters, those values will be added to the new LinkTool, either overwriting previous value(s) with those keys or appending to them, depending on thegetAppendParams()
value.- 参数:
parameters
- a boolean or new query data (either Map or query string)- 返回:
- a new instance of LinkTool
-
getParams
-
anchor
Returns a copy of the link with the specified anchor to be added to the end of the generated hyperlink.
Example:
<a href='$link.setAnchor("foo")'>Foo</a>
produces something like<a href="#foo">Foo</a>
- 参数:
anchor
- an internal document reference- 返回:
- a new instance of LinkTool with the set anchor
-
getAnchor
Returns the anchor (internal document reference) set for this link. -
getSelf
-
toString
Returns the full URI reference that's been built with this tool, including the query string and anchor, e.g.http://myserver.net/myapp/stuff/View.vm?id=42&type=blue#foo
. Typically, it is not necessary to call this method explicitely. Velocity will call the toString() method automatically to obtain a representable version of an object. -
decodeQueryPercents
This is an ugly (but fast) hack that's needed because URI encodes things that we don't need encoded while not encoding things that we do need encoded. So, we have to encode query data before creating the URI to ensure they are properly encoded, but then URI encodes all the % from that encoding. Here, we isolate the query data and manually decode the encoded %25 in that section back to %, without decoding anything else. -
equals
This instance is considered equal to any LinkTool instance whose toString() method returns a String equal to that returned by this instance's toString() -
hashCode
public int hashCode()Returns the hash code for the result of toString(). If toString() returnsnull
(yes, we do break that contract), this will return-1
. -
encode
Delegates encoding of the specified url content toURLEncoder.encode(java.lang.String)
using the configured character encoding.- 返回:
- String - the encoded url.
-
decode
Delegates decoding of the specified url content toURLDecoder.decode(java.lang.String)
using the configured character encoding.- 返回:
- String - the decoded url.
-