text:
Dynamic Creation of Validation Controls
Callum Shillan
Microsoft Consulting Service
October 2004
Applies To:
Microsoft Framework versions 1.0 and 1.1
Microsoft Visual C#
Microsoft ASP.NET
Summary: Explains how to use an XML configuration file to control the dynamic creation of ASP.NET validation controls that are automatically applied to user input controls. This allows the Web form developer to focus on implementing business logic, and also provides for a more consistent user interface. (22 printed pages)
Download the source code for this article.
Introduction and Confession
The Dynamic Validation Configuration file
Data Structures
The DynamicValidationManager Class
Using the DynamicValidationManager
Related Books
Introduction and Confession
I'd like to say that the ideas in this article were based on something noble, such as the hope of freeing the Web developer to focus on implementing business logic, or maybe a desire to create a framework that helps provide a more consistent user interface, but it just wasn't that way. The concept of using dynamically created validation controls on Web forms was born out of frustration with a User Interface team.
As with most well-run Web application projects, there were several teams with clearly defined responsibilities: We had the usual suspects of development, test, user experience, and so on. On this project we were using use case scenarios with associated screen designs, and it worked quite well. There was even a single document that held the definition of (almost) each user input field, the screens on which it was used, whether it was a required field, what the valid characters were, and what the validation error messages should be. So, we all got to work, started developing our screens, and everything was going quite well. And then the problems started...
In one of the morning meetings, the User Interface team said they needed to change the language used to report validation errors. I can't remember the details: perhaps they were too verbose and needed to be tightened up; perhaps it was the other way round. Whatever it was, we lost quite some time as we went back through all our screens and changed the wording on the ErrorMesssage and Text properties of the validation controls—but, we did it. Part of being a team is that you have to be prepared to accommodate other people, even if this means more work for yourself.
Then it happened again. Maybe this time there had been further consultation with the customer. Maybe there was some other good reason for it. But we found ourselves implementing changes again. This time, however, the changes were more extensive: the color of the messages needed to be changed; fields that were previously required were now optional, and vice versa; allowed character sets were changed; and the changes went on and on.
We realized we needed a way to protect ourselves. Somehow, we had to separate the form development from the input validation. We realized we needed a way of freeing ourselves to focus on implementing the business logic without worrying about what color or wording an error message should be. Further, we needed a framework that helped create a consistent input validation that could be easily changed and modified without needing to change each and every ASPX page.
After a concentrated whiteboard session, we ended up with a version of the implementation presented below. In essence, each input field has an associated PlaceHolder control. The PlaceHolder's ID property indexes into a configuration file to retrieve a collection of validators dynamically created and added to the PlaceHolder. When the Web form gets rendered to the client, the validation controls are also included and the user input gets validated as usual. Quite simple, really.
After removing all validator controls from the ASPX pages and inserting the PlaceHolder controls, we could hand over population of the configuration file to the User Interface team, and they could make changes as and when they needed.
It's a fairly simple concept to explain, but on the way (in this article) we will deal with accessing data held in an XML file, we'll cache the configuration data in a Hashtable that holds ArrayLists of String dictionaries, and we'll make use of reflection to access and set the properties of the dynamically created validation controls. I wouldn't recommend the use of reflection in a real-world scenario, by the way, as it will impact throughput and performance, but using reflection here allows me to keep the code a little simpler, as I'll discuss below.
The Dynamic Validation Configuration file
The first thing we need to do is to decide how to hold the configuration information. We have a number of ways of storing this information: in a database, in a resource file, in an XML file, and so on. We will store the information in an XML file for the simple reason that it is easy to edit and manipulate.
There will be two sections to the configuration file: one that defines the common and default property values used for all validators, and one that defines a collection of validators and properties to be applied to a given user input field.
Defaults Section
The last thing we want to do is have to continually specify repeated properties for every validator control, so we use a Defaults section of the configuration file to specify them once. This means we don't have to specify, for example, "ForeColor='RED'" on every validation control we define. If necessary, these default property values can be overridden for a given validator.
There are a set of properties common to every validator, irrespective of their type. I'm not going to list them all, but ones that spring to mind are CssClass, ForeColor, and Visible. For the set of common validator properties, we will have a subsection of the configuration file that holds the common values to be applied to all dynamically created validators, irrespective of their type.
Each type of validator control also has a unique set of properties (for example, the ValidationSummary's ShowMessageBox property), so we will need a subsection that holds the default property values.
Lastly, it would be good to be able to parameterize these values. This would enable us to set a single RequiredField's ErrorMessage default property value to something like, "Please enter something for {FriendlyName}," and define the friendly name elsewhere.
Not surprisingly, the Defaults section of the configuration file will be an XML node with child nodes for the common and validator-specific property values. This is shown below.
<!-- This section contains default values for validator controls --> <Defaults> <!-- These are default property values that are common to all validator controls --> <Common> <Property name="ForeColor" value="Red" /> <Property name="Display" value="Dynamic" /> <Property name="EnableViewState" value="False" /> </Common> <!-- These are default property values specific to the ValidationSummary controls --> <ValidationSummary> <Property name="EnableClientScript" value="True" /> <Property name="Enabled" value="True" /> <Property name="HeaderText" value="Please correct the following errors" /> <Property name="ShowMessageBox" value="False" /> <Property name="ShowSummary" value="True" /> <Property name="DisplayMode" value="BulletList" /> </ValidationSummary> <!-- These are default property values specific to the Compare validator --> <Compare /> <!-- These are default property values specific to the RequiredField validator --> <RegularExpression> <Property name="Text" value="Allowed chracters are {LegalValues}" /> <Property name="ErrorMessage" value="{FriendlyName} can only consist of {LegalValues}" /> </RegularExpression> <!-- These are default property values specific to the RequiredField validator --> <RequiredField> <Property name="InitialValue" value="" /> <Property name="Text" value="This is a required field" /> <Property name="ErrorMessage" value="You must enter something for the {FriendlyName}" /> </RequiredField> <!-- These are default property values specific to the Custom validator --> <Custom> <Property name="EnableClientScript" value="False" /> </Custom> </Defaults>
Note that the default value for the ValidationSummary's ForeColor property should override the value held in the Common node as this is the intuitive understanding. This behavior doesn't happen by magic; we will have to implement it in our code.
ValidatorSets Section
Any user input field will need a collection of validation controls in order to ensure that the input is correctly validated. For example, a password field might need a RequiredFieldValidator and a RegularExpressionValidator in order to ensure that the user entered input and that it was from a defined character set.
A ValidatorCollection will have an ID attribute and a collection of Validator child nodes for each validator that should be created and applied to the user input field. The ID attribute of the ValidatorCollection will match the PlaceHolder's ID property on the Web form in order to connect the user input field with the collection of validators that should to be created and applied.
For example, the ValidatorCollection for the password field might have an ID of "Password" with two Validator child nodes: one for the required field and one for the regular expression. The Validator child nodes hold the property values that either override those defined in the Defaults section or are not defined in the Defaults section.
As there will be a number of user input fields, there will be a set of ValidatorCollection nodes, and these will be held in a single ValidatorSets node of the configuration file.
A portion of the configuration file for e-mail address and password fields is given below.
<!-- This section defines the validator groups A validator group defines a collection of validators and their properties --> <ValidatorSets> <!-- This is the collection of validator controls to be used for the EmailAddress --> <ValidatorCollection id="EmailAddress" FriendlyName="Email address" ControlToValidate="TextBoxEmailAddress"> <Validator type="RequiredField" /> </ValidatorCollection> <!-- This is the collection of validator controls to be used for the Passsword --> <ValidatorCollection id="Password" FriendlyName="Password" LegalValues="alphabetic characters and numbers" ControlToValidate="TextBoxPassword"> <Validator type="RequiredField" /> <Validator type="RegularExpression"> <Property name="ValidationExpression" value="[A-Za-z0-9]*" /> </Validator> </ValidatorCollection> </ValidatorSets>
The e-mail address collection has a single Validator child node indicating that a RequiredFieldValidator should be dynamically created and applied to the TextBoxEmailAddress user input control. As the Validator node has no child nodes, all the property values will be derived from those defined in the Defaults node. Again, this doesn't happen by magic and we will need to implement this behavior in our code.
The password collection has two Validator child nodes indicating that a RequiredFieldValidator and a RegularExpressionValidator should be dynamically created and applied to the TextBoxEmailPassword user input control. The RegularExpressionValidator should have the ValidationExpression property set to "[A-Za-z0-9]". Again, the RequiredFieldValidator validator should take its property values from those defined in the Defaults node.
And this is where we define the field name values. Note that we have an attribute called FriendlyName on the ValidatorCollection node. The inner text of this attribute is used to replace any instances of {FriendlyName} found in property values held in the configuration file. This means that lots of ValidatorCollections can refer to the same default required field validator definition, and all they need to do is identify the user-friendly name in order to customize the messages displayed to the end user.
Data Structures
We are going to need some form of data structure to keep all this configuration information in. In order to keep things simple, we will allow ourselves to spend quite some time building this data structure and then hold it in the ASP.NET application cache.
This type of structure is a valid candidate to be held in the application cache, as it is relevant to the every single page within the application. We can also set a cache dependency on the configuration file, so that if the file is modified, the cache entry will be made void and then recreated on its next access.
The data structure that will be held in the application cache is shown below.
Figure 1. The data structure held in application cache
The Hashtable will have an entry for each user input field that is to have dynamically created validator controls applied to it. The key (for instance, "email" and "psword" in figure 1, above) will match the PlaceHolder's ID property enabling us to determine which list of validators to dynamically create and add.
So, somewhere on the Web form that has a user input field for, say, an e-mail address, there will be a PlaceHolder control with an ID of "email". This will be used to index into the Hashtable and access the ArrayList of validator's that need to be dynamically created and added to the PlaceHolder. The ArrayList will be iterated and the properties for the dynamically created validator will be held in the associated StringDictionary.
The DynamicValidationManager Class
In order to manage this process, we are going to create a simple class with two public methods: a construct and one that will dynamically load the validation controls for a given Web form or user control.
In order to avoid the manager being created time and again for every PlaceHolder on every Web form, we place it in the application cache. Each access will check to see whether it needs to be created. The need for creation occurs in two situations: on first access and if the item has been flushed. As the object will depend on the associated configuration file, we can also set a cache dependency so that if the file is modified, the manager will be automatically flushed from the application cache.
Dynamic Validation Manager Constructor
The constructor needs to create the data structures shown in Figure 1, above. In order to do this, the following steps will need to be performed:
- Define the manager's private properties and the constructor signature.
- Load the configuration file into an XML document.
- Load the common and default property values.
- Loop through each validator collection and
Load the individual validator collection
Loop through each defined property for the validator
Insert the common/default property value, if defined, in a string dictionary
Overwrite/Insert the specific property value in the string dictionary
Add the string dictionary to the array list of validators
Add the array list into the hash table of validator collections.
- The code to implement these steps is discussed below.
Define private properties and constructor signature
We will need two properties that are private to the dynamic validation manager: the list of validator control types we will process, and the hash table of validator collections. The constructor signature will have a parameter defining the path to the configuration file. This is shown below.
// These are the validator types that we will cater for private enum ValidatorTypes {Common, Compare, Custom, Range, RegularExpression, RequiredField, ValidationSummary}; // Holds the collection of validator controls defined // in the <ValidatorCollections> node of the configuration file // This will hold array lists of string dictionaries of property/values // for each defined validator private Hashtable validatorCollections = new Hashtable(); /// <summary> /// Builds the Dynamic Validation object /// </summary> /// <param name="validatorsConfigFile">The configuration file /// for the Dynamic Validator Controls</param> public DynamicValidationManager( string validatorsConfigFile ) {
The ValidatorTypes enumeration will be used as it gives us an easy way to either process a list of string equivalents or access an integer index. We can get the list of string values by using the GetNames() static method of the Enum class and we can simply cast an instance of the enumeration to an integer in order to get its index.
Load the configuration file into an XML document
The code to load the configuration file is quite simple and is shown below.
// Load the configuration file into an XML document XmlTextReader xmlTextReader = new XmlTextReader( validatorsConfigFile ); XmlDocument configurationDocument = new XmlDocument(); configurationDocument.Load( xmlTextReader );
We use an XmlTextReader in order to have a fast, non-cached, forward-only access to XML data. We're going to process this configuration file as quickly as possible; there is no need to cache it, as we are holding the values in our data structure.
Load the common and default property values
We will use a temporary array of StringDictionaries to store the common and default values. Each StringDictionary will hold all the common and default property values as defined in the Defaults node of the configuration file. In this way, when we come to setting the specific values of a validator defined in a ValidatorCollections node, we can quickly access the correct "default values" hash table.
The code to load the default property values is shown below.
// Holds the default properties defined in the // <Defaults> node of the configuration file // The array will hold one StringDictionary of // default properties and values for each type of validator StringDictionary[] defaultProperties = new StringDictionary[Enum.GetNames(typeof(ValidatorTypes)).Length]; // Loop through each ValidatorType int iCnt = 0; foreach ( string validatorType in Enum.GetNames( typeof(ValidatorTypes) ) ) { // Create a new hashtable to hold the // property/value pairs for the current validator type defaultProperties[iCnt] = new StringDictionary(); // Load the default settings from the configuration document LoadDefaultProperties( configurationDocument, validatorType, defaultProperties[iCnt] ); // Increment the counter iCnt++; }
We define the defaultProperties array of StringDictionaries and use the length of the array returned by the GetNames() static method of the Enum class to get the correct number of entries.
We then loop through each of the entries in the array of names from the ValidatorTypes enumeration and load in the default properties by invoking the LoadDefaultProperties method.
The code for the LoadDefaultProperties method is shown below.
/// <summary> /// Loads default settings from the configuration document into a property store /// </summary> /// <param name="configurationDocument">The XML document /// that holds the configuration information</param> /// <param name="validatorType">The validator type to load</param> /// <param name="propertyStore">The store to hold the /// retrieved default properties and values</param> private void LoadDefaultProperties( XmlDocument configurationDocument, string validatorType, StringDictionary defaultPropertiesStore ) { // Select the node that holds the default // properties for the specified validator XmlNode defaultValidatorNode = configurationDocument.SelectSingleNode( "//Defaults/" + validatorType ); // If there was a node containing default validator properties if ( defaultValidatorNode != null ) { // For each validator property foreach( XmlNode defaultValidatorProperty in defaultValidatorNode.ChildNodes ) { // Only process XML elements and ignore comments, etc if ( defaultValidatorProperty is XmlElement ) { // Insert the property name and the // default value into the store of default // properties store string propertyName = GetAttribute( defaultValidatorProperty, "name" ); string propertyValue = GetAttribute( defaultValidatorProperty, "value" ); defaultPropertiesStore[ propertyName ] = propertyValue; } } } }
Again, this code is quite simple. The method is given the XML configuration document, the type of validator to process, and the StringDictionary into which the values should be loaded.
We get hold of the default validator node in the configuration document by using the SelectSingleNode method and passing an appropriately formed XPath expression. If this returns a default validator node, we will have something of the form indicated below.
<RequiredField> <Property name="InitialValue" value="" /> <Property name="Text" value="This is a required field" /> <Property name="ErrorMessage" value="You must enter something for the {FriendlyName}" /> </RequiredField>
The sample default RequiredField node indicated above shows that there are a number of child nodes that hold the actual property name and value, and it is these that represent the property values we are interested in.
We get to the collection of child nodes by accessing the ChildNodes property of the defaultValidatorNode. For each of the child nodes, we use the GetAttribute method to extract the name/value attributes and insert them into the StringDictionary as a key/value pair.
It is worth noticing at this point that it is also possible to include parameters in the property values, and this is seen in the ErrorMessage property; the actual value for the FriendlyName parameter will be defined for a specific validator defined in the ValidatorSets node of the configuration document.
Loop through each validator collection
Now that we have loaded all the common and default values specified in the configuration document, we can load the sets of validator collections held in the ValidatorSets node.
Purely to aid readability of the code, the constructor will invoke a LoadAllValidatorCollections method and pass in the XML configuration document and the array of hash tables that hold the default values.
The LoadAllValidatorCollections method is shown below.
/// <summary> /// Loads all of the validator collections /// </summary> /// <param name="configurationDocument">The XML document /// that holds the configuration information</param> private void LoadAllValidatorCollections( XmlDocument configurationDocument, StringDictionary[] defaultProperties ) { // Select the node that holds all of the // validator collections for a given user input field XmlNode allValidatorCollections = configurationDocument.SelectSingleNode( "//ValidatorSets" ); // If we got the node that holds the validator collections if ( allValidatorCollections != null ) { // Iterate through the validator collections foreach ( XmlNode validatorCollection in allValidatorCollections.ChildNodes ) { // Load the validator collection for the user input field if ( validatorCollection is XmlElement ) { LoadIndividualValidatorCollection( validatorCollection, defaultProperties ); } } } }
This method is remarkably similar to the LoadDefaultProperties method in that it processes a series of child nodes. The LoadIndividualValidatorCollection method is invoked in order to load an individual validator collection from the XML configuration document.
Load the individual validator collection
A sample configuration document validator collection for a password field is given below.
<ValidatorCollection id="Password" FriendlyName="Password" LegalValues="alphabetic characters and numbers" ControlToValidate="TextBoxPassword"> <Validator type="RequiredField" /> <Validator type="RegularExpression"> <Property name="ValidationExpression" value="[A-Za-z0-9]*" /> </Validator> </ValidatorCollection>
There are two things that we need to understand about this XML node in order to process it correctly. Firstly, the id attribute will match the ID property of a PlaceHolder control on a Web form. This tells us where we should add our dynamically created validation controls so they can be rendered correctly and displayed as part of the Web form.
Secondly, the ControlToValidate attribute will match the ID property of some user input control to which all the dynamically created validator controls identified in the collection will be applied. Lastly, the ValidatorCollection node will define parameters as attributes, and this is shown above for the FriendlyName and LegalValues parameters.
The LoadIndividualValidatorCollection method will first create an ArrayList used to hold the data from the individual Validator child nodes. Then, for each validator child node, it will create a StringDictionary to hold the actual property names and values. The attributes of the child node will be accessed in order to remember information such as the identifier and the control to validate, and so on. This is shown below.
/// <summary> /// Load a collection of validators to be applied to a given user input field /// </summary> /// <param name="validatorCollection">The validator collection</param> /// <param name="defaultProperties">The default property values</param> private void LoadIndividualValidatorCollection( XmlNode validatorCollection, StringDictionary[] defaultProperties ) { // The list of validators to be applied to the given field ArrayList validatorList = new ArrayList(); // Remember the control to validate string controlToValidate = GetAttribute( validatorCollection, "ControlToValidate" ); // Iterate through each validator in the collection foreach( XmlNode validatorNode in validatorCollection.ChildNodes ) { // Only process XML elements and ignore comments, etc if ( validatorNode is XmlElement ) { // Use a new string dictionary to hold the validator's // properties and values StringDictionary validatorProperties = new StringDictionary(); // Remember which control this validator should validate validatorProperties[ "ControlToValidate" ] = controlToValidate; // Remember the type of validator string typeofValidator = GetAttribute( validatorNode, "type" ); validatorProperties["ValidatorType"] = typeofValidator; // Add the ServerValidate event handler (only used on Custom validators) validatorProperties[ "ServerValidate" ] = GetAttribute( validatorNode, "ServerValidate" );
At this point, we have recorded some control information used to define property values specific to an individual validator. For example, we have recorded which user input control should be validated, what type of validator control should be created, and, if given, the name of the method to invoke on ServerValidate events. It is now time to load the property names and values specific to this validator into the validatorProperties StringDictionary.
We first load the common property values and then the default property values into the validatorProperties StringDictionary before loading the specific values from the configuration document. We handle the assigning of common and default values by invoking an AssignDefaultValues method. The private method accepts two parameters: the StringDictionary that will hold the property names and values for this validator and another StringDictionary that contains the common or default property and values.
In this way, default property values overwrite, and therefore take precedence over the common values. This is shown below.
// Assign the default property values common to all validators AssignDefaultValues( validatorProperties, defaultProperties[(int) ValidatorTypes.Common] ); // Assign the default property values specific to this type of validator ValidatorTypes validatorType = (ValidatorTypes) Enum.Parse( typeof(ValidatorTypes), typeofValidator ); AssignDefaultValues( validatorProperties, defaultProperties[(int) validatorType] );
We've used a little trick to determine which of the StringDictionarys held in the defaultProperties array should be used. Remember the declaration of the ValidatorTypes enumeration earlier?
// These are the validator types that we will cater for private enum ValidatorTypes {Common, Compare, Custom, Range, RegularExpression, RequiredField, ValidationSummary};
The typeOfValidator variable is a string picked up from the "type" attribute of the validatorNode and it will have one of the values: "Compare", "Custom", and so on. As this is a string representation of the name of one of the enumerated constants, we can use the static Parse method of the Enum class to get an equivalently enumerated object.
As we have not specified an underlying type for the enumeration, the default Int32 type is used. As such, casting the validatorType enumeration to an Int32 gives us the integer value from the enumeration. We can then index into the defaultProperties array of StringDictionarys for the correct validator type's default values.
All that remains is for us to iterate through each child node of the validator to access the properties and values specifically defined for this validator. After this, we can replace any field name parameters with the values derived from the equivalently named attributes of the ValidatorCollection node. Finally, we can add the StringDictionary of specific property names and values to the ArrayList.
This is shown below.
// Iterate through each property node foreach ( XmlNode propertyNode in validatorNode.ChildNodes ) { // Only process XML elements and ignore comments, etc if ( propertyNode is XmlElement ) { // Add property names/values explicitly given for this validator string propertyName = GetAttribute( propertyNode, "name" ); string propertyValue = GetAttribute( propertyNode, "value" ); validatorProperties[ propertyName ] = propertyValue; } } // Now we have the string dictionary, make any fieldname // replacements that might have been specified ReplaceFieldnamesWithValues( validatorProperties, validatorCollection ); // Finally, add the string dictionary containing the // validator property values to the list of validators // for this group validatorList.Add( validatorProperties );
I'm not going to go into the fine detail of how the fieldnames are replaced with the appropriate values. Simply, we have to loop through property values held in the string dictionary looking for an open brace. When we find one, we get the string up to the close brace, and this is our parameter name. We then expect to find an attribute of this name on the validator collection node, and we take its InnerText property as the parameter value. It is then a simple matter of string replacement to substitute the parameter name with the parameter value.
Dynamically Load Validation Controls
We now have the configuration file loaded into a runtime data structure as defined in Figure 1, above, and we can turn our attention to the fun part: to dynamically create the validator controls and add them to the PlaceHolder.
The LoadDynamicValidators method will take a single input parameter: the UserControl that hosts the placeholders. The basic idea is that this method will iterate through the collection of controls hosted by the user control. If a PlaceHolder control is found, we will index into the validatorCollections hash table to see if there is set of validator controls that should be dynamically created for this PlaceHolder. If there is, we simply iterate through them, create the appropriate control, set its properties according to the values found in the StringDictionary, and add it to the PlaceHolder's controls. When the Web page is rendered to the client browser, the validation controls we have dynamically created will be included and the user's input will be validated as defined by the configuration file.
Note that for this implementation, I have restricted user input controls to being hosted within a user control. If you have user input controls on the actual ASPX Web page, you will need to modify or overload this method accordingly.
The LoadDynamicValidators' method signature, iterating through the user control's child controls and detecting whether we have a PlaceHolder control is shown below.
/// <summary> /// Dynamically load validators into a placeholder /// </summary> /// <param name="placeHolder">The place holder to load the /// validators into</param> /// <param name="userControl">The user control that /// hosts the user input fields and validation controls</param> public void LoadDynamicValidators( UserControl userControl ) { foreach ( Control childControl in userControl.Controls ) { if ( childControl is PlaceHolder ) { // Assign a place holder control, purely for readability PlaceHolder placeHolderControl = (PlaceHolder) childControl;
Note that we make use of a placeHolderControl variable. This is purely for readability as we could have directly referenced the childControl identifier within the body of the foreach statement. However, using the placeHolderControl variable makes the code a little easier to read and understand at the expense of a overhead of a few extra clock cycles and a miniscule memory consumption.
We now need to determine whether the placeHolderControl has an entry in the hash table of the validatorCollections hash table. This is shown below.
// Get the list of validators to be dynamically // added to this userControlChildControl ArrayList validatorList = (ArrayList) validatorCollections[ placeholderControl.ID ]; // Only process controls that have been configured // to contain dynamically created validator controls if ( validatorList != null ) {
If validatorList is not null, that means that we have a list of validators that should be applied. We will need to dynamically create each specified validation control and set their properties accordingly. This is shown below.
// Loop through each validator in the list for ( int iCnt = 0; iCnt < validatorList.Count; iCnt++ ) { // Get the string dictionary of property name/values for the validator StringDictionary validatorProperties = (StringDictionary) validatorList[iCnt]; // Create and add a spacer to go between each // dynamically created placeholderControl // Note that whether this is done (and what is added) // could be driven from the configuration file Literal spacer = new Literal(); spacer.Text = " "; userControl.Controls.Add( spacer ); // Dynamically create and populate the validator type // based on configuration information held in the string // dictionary switch( validatorProperties["ValidatorType"].ToLower() ) { // Each case statement has the same form: // (1) create the correct type of validator, // (2) set the properties of the validator // (3) add it to the placeholderControl placeholderControl case "range": RangeValidator rangeValidator = new RangeValidator(); SetProperties( rangeValidator, validatorProperties ); placeholderControl.Controls.Add( rangeValidator ); break; // The requiredfield, regularexpression, compare, // validationsummary are omitted from this code snippet // in the interests of brevity. However, // they are similar to that for the range validator // Custom validators also need the event handler to be set case "custom": CustomValidator customValidator = new CustomValidator(); SetProperties( (Control) customValidator, validatorProperties ); SetEventHandler( (Control) customValidator, validatorProperties, userControl ); placeholderControl.Controls.Add( customValidator ); break; } }
We get the string dictionary that holds the property names and values specified in the configuration file by indexing into the validatorList and casting appropriately. In the string dictionary, the keys map to the various property names and the associated values map to a string representation of the property value.
In the code above, we automatically add in a literal holding an HTML non-breaking space. This could (and probably should) come from the configuration file. It is easy to imagine additional attributes, "HTMLPrefix" say, on the various Defaults nodes as well as the ValidatorCollection and Validator nodes that would enable common, default, and specific HTML to be added. And there's no reason why we couldn't cater for an "HTMLPostfix" attribute as well.
The ValidatorType key of the string dictionary tells us which type of validator control should be dynamically created. The switch statement is used to direct flow control to the appropriate case statement, and we can finally create the validator control and set its properties.
Apart from CustomValidator controls, each case statement has the same pattern: create the validation control, set its properties as defined by the string dictionary, and add it to the PlaceHolder control.
We won't look at the detail of the private SetProperties method that gets invoked, as it is a fairly simple routine. It iterates through each key in the string dictionary and interprets this as a property name. Using reflection, we get a PropertyInfo object that will allow us to set the value of the control's property. We then create an object of the correct type and finally use the PropertyInfo's SetValue method to set its value.
Although we have used reflection to set the control's properties, this wouldn't be my recommended option for a real-world scenario. The cost of reflection from a throughput and performance perspective is too great. In practice, there would be a series of switch statements that would first determine the type of validator being used and the property being set. Then another switch statement would determine and set the property directly. However, in order to keep the demonstration code relatively simple and easy to read, I have opted for reflection.
In the code snippet above, we had to cater for setting an event handler for CustomValidator controls. The CustomValidator control is used to provide a user-defined (that is, developer-defined) validation function for an input control. CustomValidator controls always have a server-side validation function and they may have a client-side validation function. The client-side validation function is easily handled in our code, as it is just a string property and can be specified, and it is accessed and set just like any other string type property (for instance, ErrorMessage or Text).
Normally, the Web form developer would create a method in the code-behind of the Web form or user control and specify that should be invoked in response to the ServerValidate event. As part of the build process, Visual Studio would take care of doing all the difficult work behind the scenes in order to implement this. Unfortunately, there is no such luxury for us, and we have to use reflection in order to get this done.
The SetEventHandler method is used to set an event handler and is shown below.
/// <summary> /// Set an event handler on a validation control to /// invoke a emthod in the user control /// </summary> /// <param name="validationControl">The validation /// control that wil raise the event</param> /// <param name="eventName">The name of the event</param> /// <param name="methodName">The method to invoke</param> /// <param name="userControl">The user control on /// which the method is declared</param> private void SetEventHandler( Control validationControl, string eventName, string methodName, UserControl userControl) { if ( methodName != null && eventName != null ) { // Get the type object for the validation control Type childControlType = validationControl.GetType(); // Get information on the event EventInfo eventInfo = childControlType.GetEvent( eventName ); // Create a delegate of the correct type that will // invoke the specified method on the class instance // of the user control Delegate delegateEventHandler = (Delegate) Delegate.CreateDelegate( eventInfo.EventHandlerType, userControl, methodName); // Add the delegate as the eventhandler for the child control eventInfo.AddEventHandler( validationControl, delegateEventHandler ); } }
Assuming we have been given a non-null event name and method name, the first thing to do is to get the Type object of the validation control. This forms the root of reflection functionality and is the primary way to access metadata, such as event information.
The event model of the Microsoft .NET Framework is based on having a delegate that connects an event with its handler (and this is what we are trying to do—connect an event with its handler).
The delegate class is able to hold a reference to a method. Unlike other classes, a delegate class can hold references only to methods that match its own signature. As such, a delegate is equivalent a type-safe function pointer.
We invoke GetEvent on the validation control's Type object to get information about the specified event. This allows us to access the Type object of the handler associated with this event. From this we are able to dynamically create a delegate of the correct type.
There are a number of overloads of the static CreateDelegate method of the Delegate class. The one that we use allows us to create a delegate for (or you can think of it as a function pointer to) a specified instance method on a given class. As such, we create a delegate of the correct type that will invoke the method specified by the methodName parameter implemented in the user control object.
Once we have our delegate event handler, we simply add it to the validation control by invoking the eventInfo's AddEventHandler. Once this is complete, whenever the event is raised on the validation control, it will invoke the specified method from the instance of the user control.
Using the DynamicValidationManager
So, we now have a class that, given a configuration file, implements a mechanism to dynamically create validation controls and apply them to various user input controls.
But how do we use this class in a Web application? It couldn't be simpler, really. In the Web application project that accompanies this article, I have created a very few forms that collect information from the user. The idea is that they are registering information for a free e-mail account. Once this information is entered, the user can log in to their account and, were it a real application, be able to send and receive e-mails.
I have implemented a simple form of "one page Web application". This single page loads various user controls as specified by the "page" Request parameter. This means that the whole of the business logic of the application is actually implemented in a series of user controls.
The code-behind for the user controls is modified so that they derive from a helper class called DVCUserControl (which itself derives from the System.Web.UI.UserControl). We override the OnInit method so that we can take the additional steps necessary to create an instance of the user control. As we want to dynamically load validator controls into the various placeholders on the user control, we simply invoke the LoadDynamicValidators method of the dynamic validation manager.
This is shown below.
/// <summary> /// Used to perform any initialization steps required /// to create and set up this instance /// </summary> /// <param name="e">The event arguments</param> protected override void OnInit( EventArgs e) { // Load all dynamically created validators for this user control DynamicValidationManager.LoadDynamicValidators( this ); }
This article has described a mechanism to implement the dynamic creation of validation controls for Web applications. This mechanism is most effective when there are either user input controls for similar information spread across many pages or if there are frequent changes to the underlying properties of the validation controls.
The mechanism frees Web developers from having to concentrate on user input validation and allows them to concentrate on implementing business logic. As such, this mechanism will simultaneously improve the consistency of the end user experience whilst also increasing developer productivity.
Related Books
About the author
Callum Shillan is a Principal Consultant working for Microsoft in the UK, specializing in Internet Business. He's been working with C# and ASP.NET on large Internet Web sites for the last few years. Callum can be reached at firstname.lastname@example.com.


text:
Style Watch PollWould You Wear These Trends?
Stars show off some of the hottest looks. Do you love 'em or hate 'em? Vote now!
Credit: Gilbert Flores/Celebrity Photo; Splash News Online; Rocke/Splash News Online
Updated: Thursday Jan 26, 2012 | 06:35 AM EST By: Alex Apatoff
More from PEOPLE
Latest News!
- Coco Rocha Welcomes Daughter — See Her First Photos!
- The Style Top 5: Amal Clooney Brings Her Glam Street Style to NYC, Iggy Azalea Gets Candid About Her Body and More
- Pregnant Jessica Biel Heads to a Roller Rink for a Birthday Party (PHOTO)
- ALF's Series Finale Aired 25 Years Ago, but He Never Truly Left Us
- Tom Brady Gets Serious Air in Cliff Dive: 'Never Doing That Again' (VIDEO)

subset: commoncrawl


text:
Jennings v. Lincoln National Life Insurance Company
|Case Number:
|March 28, 2013
|Virginia Western District Court
|Roanoke Office
|Presiding Judge:
|James C. Turk
|Nature of Suit:
|Labor: E.R.I.S.A.
|Cause of Action:
|28:1441 Notice of Removal
|Jury Demanded By:
Access additional case information on PACER
Use the links below to access additional information about this case on the US Court's PACER system. A subscription to PACER is required.
Access this case on the Virginia Western District Court's Electronic Court Filings (ECF) System
- Search for Party Aliases
- Associated Cases
- Attorneys
- Case File Location
- Case Summary
- Docket Report
- History/Documents
- Parties
- Related Transactions
- Check Status
|Search for this case: Jennings v. Lincoln National Life Insurance Company
|Search News
|[ Google News | Marketwatch | Wall Street Journal | Financial Times | New York Times ]
|Search Web
|[ Legal Web | Google | Bing | Yahoo | Ask ]


text:
One Bedroom Condo, Your Home AbroadUPDATED
Makati48 m² PHP 41/m² 1 bedroom 1 bathroom for rent apartment makati
In makati city. This apartment in the roces tower is on the 33rd floor, and has a balcony... Deck of makati city skyline, but also manila bay and bataan. Especially at night...
64 photos
Similar apartments: for rent home city manila1 day + 4 hours ago in Travelmob
Central Atrium Residences Balanga, Bataan
(balanga, bataan) price p 10,242,000.00 classification for sale classified id 37827... - free landscaping for more details, price quote, and site tripping in balanga...01 15, 15 in HanapTayo - Hanap Tayo
Chantal Model House No.16775
Bataan220 m² PHP 43,145,227/m² 3 bedrooms 3 bathrooms
09491950032 (balanga city) floor area 192 house price 4,613,000 lot area... Bank financing, you will select between 5 20 years to pay. Location: balanga...2 weeks + 2 days ago in Zeebuk
Receive alerts of ads like this by emailYou can cancel at any time
We will send you all the notifications that are linked to this search completely free
Lot Commercial Bldg In Balanga Bataan01 21, 13 in Advertigo
Commercial Bldg For Sale Quot Prime Location
Llocation: st joseph st. Balanga city, bataan lot area: sq. Meters / with storey building-commercial price: php m. (negotiable) call us: -/- (direct buyers only).01 21, 13 in Advertigo
Apartment/flat 48 M2 Makati City
Makati48 m² PHP 1/m²
In makati city. This apartment in the roces tower is on the 33rd floor, and has a balcony... Deck of makati city skyline, but also manila bay and bataan. Especially at night...
Similar apartments: for rent city flat furnished metro manila2 weeks + 1 day ago in Bedycasa
House For Sale In Balanga, Bataan, Ref# 628342
Balanga484 m² PHP 2,529/m² 2 bedrooms 1 bathroom
Balanga lot for sale, balanga subdivision, rent to own house in bataan... House for sale in balanga, bataan. Asking price: 1,224,000 php. Bedrooms...
4 photos
Similar apartments: for rent bedrooms bataan11 30, 12 in Mondinion
House And Lot Balanga Bataan, Sacrifice Sale
For sale, rent, lease ! We really need to rent or sell our house, please compare to other houses in balanga, this is a bargain. 2 storey commercial/residential...11 8, 11 in Adpost
Spira Apartment Compound #rs 1
Balanga3 bedrooms 2 bathrooms
This is an apartment compound in balagtas, batangas city. It is composed... 8 apartments and 2 swimming pools. There are 3 sections to this property front...
5 photos07 24, 12 in iProperty.com - Edwin Pages
Hamilo Coast Pico De Loro Cove
Balanga28 m² PHP 132,143/m² 6 bedrooms 5 bathrooms
Resort hotels, residential apartments and villas, retail and commercial facilities...
5 photos07 24, 12 in iProperty.com - Edwin Pages
Rent To Own House In Balanga City For Only P6,434.521 bathroom
Price: p1,224,000 downpayment 20%: p244,800 - payable in 8 months 0% interest or p27,475 reservation: p25,000 financing schemes: bank financing for ofws |...11 8, 11 in Adpost
Big And Newly Constructed Commercial Building In Dinalupihan, Bataan
Newly constructed commercial building for rent in burgos st, dinalupihan, bataan. 50 meters far from town plaza and church. 25 km. From balanga city &olongapo...11 8, 11 in Adpost
House For Rent2 bathrooms
House for rent don pepe village tuyo balanga city bataan 15k per monthly 1 month advance 2 month deposit 24hrs gate security 100% safe and secured 100% great...10 30, 13 in Adpost
Apartment For Rent1 bathroom
Located at: #923 bataan st balic-balic sampaloc manila city 2 bedrooms up&down.11 8, 11 in Adpost
We have 1 properties matching your query in the last 24 hours, 1 in the past week, 2 in the past two weeks and 3 in the past month.
78% of the properties for rent have photos. On average an advert for For Rent Apartment Balanga Bataan carries 7.727 photos.
The most popular number of bedrooms in Philippines is 3, then with 6 and 2.
- › Bataan (7)
- › Metro Manila (2)
- › Agusan Del Sur (1)
- › Bulacan (1)
- › Quezon (1)
Last updated
Max price:
Min bedrooms:
Min area:
Min bathrooms:
- › With Pictures (11)
House type
- › Apartment (5)
- › House (2)
- › Condominium (1)
- › House And Lot (1)


text:
If you own an existing business or are looking to start one, we can help. With over 7,875 businesses in the borough, our experienced advisors can provide support, advice, training and much more.
Contracts for a wide variety of works, services and supplies are available for tender each year.
You will find a wide range of office, retail and commercial space to suit your company's needs.
New and existing food sellers are invited to be part of a new weekly street food market which launches on Saturday 25 April in Deptford town centre.
Get emails about contract opportunities
From Saturday 11 April


text:
Sport Cards of the Aggies and Rams
Colorado State at New Mexico
Colorado State at New Mexico
MILESTONES: Scored his 700th career point versus UNLV on Feb. 18, 2006... Grabbed his 300th career rebound at Air Force on Feb. 1, 2006... Recorded his 100th career blocked shot versush TCU on March 7, 2006.
2005-06 SOPHOMORE SEASON: Played in and started all 31 games for the Rams... Named to the all-Mountain West first team at the season's conclusion... Selected to the NABC all-district second team... Averaged 16.2 points on 51.7 percent shooting (178-of-344) with 7.3 rebounds, 2.3 assists and 2.1 blocked shots in 28.7 minutes per game... Scored in all 31 games, including 28 double-digit efforts... Ranked among team leaders in nearly every statistical category including first in rebounding average (7.3), blocks (66) and scoring average (16.2), second in minutes per game (28.7) and assists (70) and third in field goal percentage (.517)... Ranked among Mountain West Conference leaders in seven categories including second in blocked shots (2.14 pg), fourth in scoring (16.2 ppg), rebounding (7.3 rpg) and defensive rebounds (5.06 pg), seventh in offensive rebounds (2.26 pg) and eighth in field goal percentage (.517) and free throw percentage (.763)... Led CSU in scoring 14 times, in rebounding 16 times, in assists five times, in steals five times and in blocked shots 13 times... Hit for a career-best 28 points including a 12-for-12 performance from the free throw line at New Mexico (1/7)... Recorded four double-doubles on the season including games against North Dakota State (11/23), Denver (11/26), Auburn (11/28) and UNLV (2/18)... Blocked a career-most seven shots in the season-opener against Northern Colorado (2/19).
2004-05 FRESHMAN SEASON: Played in 26 games and started in 11, all versus Mountain West opponents... Named Mountain West Freshman of the Year and all-MWC honorable mention in his rookie season... Averaged 10.5 points on 55.4 percent shooting (103-of-186) with 5.8 rebounds, 1.7 assists and 1.4 blocked shots in 24.4 minutes per game... Scored in all 26 games while hitting for double-digits 13 times... had his first career double-double versus UNLV (2/21) hitting for 24 points and 11 rebounds... Ranked 16th in the MWC in scoring, ninth in rebounding and fifth in field goal percentage... Was among team leaders in several statistic categories including first in blocks (36), second in field goal percentage (.554), rebounding (5.8 rpg) and points (274) and third in assists (45)... Sat out games against New Mexico and Utah due to a knee injury... Posted a career-best 14 rebounds at Air Force (1/8) in his first career start.
HIGH SCHOOL: Jason was regarded as the state's premier prep player during his senior season at Platte Valley High School... Named the most outstanding player in the Colorado High School All-State game, was a two-time state player of the year, was named to the "All-Colorado" team as a junior and senior and was a three-year letterwinner and starter for the Broncos... Was named to all-conference and all-state teams three times and was selected as most outstanding player in state Class 3A tournament as a senior... Currently holds school records for most career blocked shots, career scoring, consecutive free throws made, and most blocked shots in one game and led his team in scoring, rebounding and blocked shots three seasons in a row... While being recruited, he chose Colorado State above Gonzaga, Utah, and Wyoming.
PERSONAL: Born March 2, 1986 in Greeley, Colo... Son of Jack and Roberta Smith... Has two brothers, Craig and Aaron, and one sister, Joyce... Majoring in business... Full name: Jason Victor Smith
- Tickets
Download Schedules: Add to calendar
More Headlines
Colorado State reaches Mountain West Semis with...
Daniel Bejarano scored 19 points and grabbed nine rebounds and Colorado State survived the loss...
Game notes: Rams face Bulldogs in MW...
No. 3 seed Colorado State (26-5, 13-5 MW), opens play at the 2015 MW Championships on Thursday...
Avila, Bejarano tabbed USBWA All-District
On the same day that Colorado State's J.J. Avila and Daniel Bejarano each earned Mountain West...
Four Rams honored by Mountain West
The Mountain West announced Tuesday its all-conference awards, as voted on by the league's 11...
CSU's Avila named MW Player of the Week
Colorado State senior forward J.J. Avila has been selected as the Mountain West Player of the...
Men's basketball recap: Avila leads Rams to...
Senior forward J.J. Avila posted another huge game with 29 points, 13 rebounds, four assists and ...
Game notes: CSU visits Utah State in regular-se...
Colorado State (25-5, 12-5 MW), closes the regular season Saturday night in Logan, Utah,...
Men's basketball recap: Colorado State...
Colorado State senior forward J.J. Avila, back on the court after missing the Rams' previous...
Official Store


text:
Layout Help - Peninsula?
Hi GW! I'm back. This time I am helping a friend with her kitchen layout. She's combining 2 rooms to make one eat in kitchen that's going to be 9.6" wide in front and 11.6" wide in back and about 23' long.
The space needs to include banquette or dining table to seat 6, wall oven, cooktop, pantry, and the other usuals - dishwasher, fridge.
We are at the very preliminary planning stage. This is a family of 5. Right now, mom is the main cook, but helpers are likely to develop as kids get older.
Right now, the kitchen is at the front of the house, but we are considering moving the kitchen to the back. There will be windows along the front and back walls, but none on the 23 ft. long walls as one side is against garage and the other side is against the stairway. Stairway is not accessible from kitchen.
My initial thoughts are that the space is too narrow for an island and proper aisle clearances, but a penninsula might work. What do you think? All feedback is appreciated.
Thanks GW!
what are the 2 rooms being joined? I see access to a covered porch, but thru a narrow door? and down some steps?.....I would want the kitchen sink window to instead be French doors or patio door and hook up flow to back yard and porch via decking/small patio/stepping stones/etc...probably have to change the screen panels on that side of porch for a screen door.....but I would....Placing sink and counter there prevents this option and that kind of access from this space would be included, if my home,even if the exterior deck or patio or the doors themselves can't be in the budget just yet.The kitchen doesn't really flow into living room/dining room at all, so at least a couple of seasons of being able to move into/out of back yard/porch/patio,, along with more light and view,would add huge value to the home.Therefore I would start planning with leaving kitchen functions at the front and the rear is where a table or banquette of smaller proportions coming off range wall might work. Then again, there is probably something like a double island[one being narrower], or galley 'within' type of kitchen that could make this a very special spot. The plan so far seems just okay. I think more enhancement can be created. This is for your friend?A lot depends on what kind of searching/thinking she's done..or what her budget is/etc.Has she searched Houzz or shown you pics/etc?
What I would do is:
1. move the refrigerator to where the cooktop is now but butted against the lower right corner.
2. move the pantry to the wall where the coat closet is, but instead use a wider shallow (12" deep) pantry cabinet spanning the width of that wall. This could be a hutch design or just a 12" pantry cabinet. Depending on the type of refrigerator she chooses, some type of narrow pull out may be needed for door clearance.
3. If it were me, I'd ditch the cooktop and double ovens in favor of a larger range with ovens below and center it in the left wall; but either way I'd keep the cooktop and ovens together on that wall.
Is she planning to put in a microwave?
These changes will allow her to better separate her zones; cooking, prep and cleanup.
I would not put in a peninsula as corners will limit her storage options.
Herbflavor - 2 rooms being joined are small kitchen and large breakfast room. Covered porch is just a landing to stairs, leading to patio. Yes, microwave is to be included. French doors in back would be nice, but how could we fit in dining table and great kitchen? This is a complete reno of the space, but budget is limited as other rooms in the home need to be renovated as well. Pictures on Houzz are fabulous, but I feel we don't have a direction concerning layout.
Also explore the option of using 30" deep counters along that wall where the refrigerator will go. As she has a family I think she would like a full depth refrigerator (cheaper plus more space) so doing the deeper counters to one side and shallow pantry on the other should give it a built in look.
Can something creative be done with the back of the coat closet to steal a few inches for the kitchen side so that run can be evened out a tad more? Perhaps the architect can suggest something.
the way to allow a patio door at rear window location: L shape kitchen using front window wall and long garage wall ending cabs at oven position.Place banquette bench on range wall [stair wall]and use a patio door with left panel being the opening panel.Put in 12 or 15 in depth setup beyond oven position on garage wall for serving/laying out food/etc-handy for coming in/out...the reduction in depth will allow for passing behind chairs on open side of banquette table..The range[or stair] wall is 11 feet-much can be done with some storage on either end with banquette in between or shift bench one way or the other with substantial storage occupying some of those 11 feet. Some of the foyer closet could be cut into for wall ovens...you will have some other storage or locker locations in about 3-4 feet[or more] adjacent to banquettte bench near patio door for people coming in from garage and porch-extremely useful.
Dilly- Would something like this work? I put the wall oven/microwave next to the cooktop, but you could put the fridge there, instead. If you didn't need the wall oven, you could open the peninsula up to the dining area. I just made it a dish storage or pantry on the back side...up to you :)


text:
Untitled Wolverine (2017)
Untitled Wolverine Synopsis
Untitled Wolverine Release Date
In Theaters March 3, 2017
Untitled Wolverine Credits
Starring: Hugh Jackman
Written by: David James Kelly
Distributor: Fox
Subscribe To Untitled Wolverine Updates
if you're excited for Untitled Wolverine
How Many More Wolverine Movies? Hugh Jackman Just Told Us
Last we heard from Hugh Jackman, he made it fairly clear he did not want to give up his signature role as Wolverine in the X-Men franchise. But, looks like Jackman may be letting go of his adamantium claws a little sooner than we had previously thought.
by Catarina Cowden March 28, 2015 comments
10 Current Superheroes Or Supervillains That Need To Be Recast
Superhero movies immune to a common problem that has plagued many franchises: recasting. With that in mind, here are the main superheroes and super villains that will need to be recasted soon for future appearances for a variety of reasons.
by Adam Holmes March 3, 2015 comments
The Deadpool Movie May Feature One Of The More Popular X-Men
Will Hugh Jackman ever hang up his adamantium claws? The latest word from the actor himself is that he would be totally down to join Ryan Reynolds in the Deadpool movie.
by Nick Romano March 2, 2015 comments
How Long Hugh Jackman Plans To Play Wolverine
In a recent interview, Hugh Jackman discusses Wolverines place in his life and how the Oscars-dominating film, Birdman has come to shape his view of how long he wants to hold on to the character.
by Joseph Baxter February 24, 2015 comments
Wolverine 3 Probably Won't Take Place In An X-Men Time That We've Already Seen
Were still a long way out from seeing the third Wolverine movie, but that hasnt stopped any of us from trying to unearth what secrets we can from its star Hugh Jackman. While we squeezed a couple of lines from the actor during the press junket for his new movie Chappie, MTVs Josh Horowitz was able to do the same.
by Nick Romano February 16, 2015 comments
X-Men: Days Of Future Past Almost Featured A Younger Wolverine
There's no arguing, with the franchise dating back almost a decade and a half now, that the X-Men are getting older. With that in mind, check out what Matthew Vaughn had to say about potentially replacing Hugh Jackman as Wolverine had he directed 2014's X-Men: Days of Future Past.
by William Fanelli February 15, 2015 comments
Watch Hugh Jackman React To The Marvel Spider-Man News
By now everyone has heard the exciting news of Spider-Man and Marvel being reunited, that left some of us with our heads spinning. Looks like we superhero fans weren't the only ones who had our minds blown by the big news, however, as this recent clip of Hugh Jackman proves he too was actually quite surprised.
by William Fanelli February 11, 2015 comments
Will Wolverine Team Up With Professor X? Hugh Jackman Told Us This
News broke the other day from the mouth of Patrick Stewart himself that he was in talks to join up with Hugh Jackman in the next Wolverine movie. (The Wolverine 2? Wolverine 3? Whatever you call it. It looks like the plan is to feature Professor Xavier in the sequel to James Mangolds film in some way. We caught up with Jackman on Tuesday to get his comment on the situation, and, as expected, he skirted around the topic.
by Nick Romano February 10, 2015 comments
10 Big Superhero Questions We'll Get Answers To In 2015
Even though 2015 doesnt have as many comic book movies coming out, theres still plenty of exciting news and revelations that will come out. Check out the superhero movie questions that we think will be answered over the next 12 months.
by Adam Holmes December 30, 2014 comments
Wolverine In X-Men: Apocalypse? Get The Latest Update
The bigger question entails whether we need a new Wolverine to factor into X-Men: Apocalypse, and whether the role should be recast. Bryan Singer has revealed that his plot will take place in the 1980s (much like Days took place in the 70s), and if they are going after younger versions of Storm and Cyclops, then shouldnt Logan be younger, as well?
by Sean O'Connell December 16, 2014 comments
Watch Wolverine Dance To Beyonce's Single Ladies In This Epic Halloween Footage
Those who have been paying attention over the years know, though, that dancing is in Wolverines blood. Dont you recall when Hugh Jackman Hollywoods on-screen Logan busted out the claws to dance Gangnam Style with Psy?
by Sean O'Connell November 3, 2014 comments
The Two Superheroes Keanu Reeves Desperately Wants To Play
Keanu Reeves has gotten to play a variety of roles over the years, but one type of character hes never been able to sink his teeth into is a superhero. Unfortunately for him, the two superheroes hes expressed interest in playing also happen to be the ones who wont be free anytime soon.
by Adam Holmes October 22, 2014 comments
Wait, Why Are Wolverine And Storm Making Out In This X-Men Footage?
Another deleted scene from X-Men: Days Of Future Past has been released just a few days before its DVD and Blu-Ray hits the shelves. And this one is a belter too, because it sees two of the mutant posses most beloved characters, Storm and Wolverine, share a kiss before Logan travels to the past to try and stop the Sentinels from ever being created. For devoted readers of the comic its a real tearjerker, because hoards of fans have always longed to the see the duo get together.
by Gregory Wakeman October 6, 2014 comments
3 Huge Ways The End of X-Men: Days Of Future Past Affects Future X-Men Movies
We've decided to delve into the three worlds of the X-Men and discuss where they've left off following the events of Days Of Future Past. To be honest, there's a whole lot of questions hanging in the air, and we don't want to have to wait until 2016's X-Men: Apocalypse to answer them all.
by Gabe Toro May 26, 2014 comments
Monday Movie Memo: It's Time For Hugh Jackman To Hang Up Wolverine's Claws
It's time for him to walk away from the role that helped put him on the map, and I'll explain why in this week's Monday Movie Memo. Watch the video
by Sean O'Connell May 26, 2014 comments
5 More Fox Franchises That Could Use A Wolverine Appearance
But whatever the case, Fox is going to thrive on Jackman as Wolverine seemingly forever, so why not use him to boost other Fox franchises? And so we ask, which other Fox franchises deserve a little bit of Wolverine themselves?
by Gabe Toro May 15, 2014 comments
Could Wolverine Pop His Claws In X-Men: Apocalypse?
X-Men: Apocalypse would primarily focus on the First Class gang and be set in the 80's, the early claim announced. But it would also be a fairly epic film, and you can't do epic without Wolverine, can you? It seems like Apocalypse would be prepping the world for an X-film without Wolverine (the character has appeared in seven X-movies thus far), but we might not be done with Jackman yet.
by Gabe Toro May 12, 2014 comments
Bob Hoskins Was X-Men Comic Writer's First Choice For Wolverine
Long before Bryan Singer rounded up Hugh Jackman, Halle Berry and company for 2000's X-Men, Claremont was dreaming of his ideal X-Men movie, wherein Bob Hoskins would be his Wolverine.
by Kristy Puchko May 1, 2014 comments
Hugh Jackman Still Isn't Signed For That Third Wolverine Movie
There were some theories that Wolverine could lead whatever mystery Marvel project the studio has lined up for 2018, but that seems slightly in doubt. The Les Miserables star will be 49 years old in 2018 anyway, and it's a bit difficult to keep playing ageless when you're pushing fifty.
by Gabe Toro April 30, 2014 comments
Superhero State Of The Union: Are These Franchises Too Big To Fail?
The coming years have a full 10 (!) more superhero films scheduled for release, with countless others to follow, just waiting for a schedule space to clear up. But what happens if these films don't work? What happens if the fans don't want to see certain characters again and again?
by Gabe Toro April 14, 2014 comments
Hugh Jackman Mashes Up Les Mis And X-Men For Wolverine The Musical
For years Hugh Jackman has managed an incredible career where he balances playing one of comic book movie's surliest heroes with rousing musical performances on stage and screen. Now, the star of The Wolverine and Les Miserables combines two of his greatest roles for our amusement.
by Kristy Puchko March 31, 2014 comments
The Wolverine Sequel Reportedly Coming After X-Men: Apocalypse
Of course maybe Mangold is wondering what we all are: where does Days Of Future Past leave Wolverine? The Wolverine seems to occur in modern day, but the events of Days Of Future Past make Magneto and Professor X confront him in the post-credits sequence of The Wolverine, which is billed as two years later.
by Gabe Toro March 17, 2014 comments
X-Men: Days Of Future Past - What We Know So Far
We have to dig deep into Days of Future Past. We have roughly 100 moving parts to organize as we get ready for the sequels May 26 release date. Heres everything you need to know about X-Men: Days of Future Past.
by Eric Eisenberg March 14, 2014 comments
Wolverine Shows Off New Costume In X-Men Days Of Future Past Image
Im a selfish Wolverine fan. Despite all the great work Jackman has done in the X-Men movies, Im not going to be happy until I see Wolverine in a mask, in a classic suit. Will it happen before the actor hangs up his claws? We shall see.
by Sean O'Connell December 16, 2013 comments
Hugh Jackman Unsure He'll Be Back As Wolverine In Future Mutant Movies
As Jackman himself says, this is a way off. Jackman seems to actively enjoy playing Wolverine, and fans still love him in the role. Fox has big plans for the mutant franchise, and this hero in particular. Will Jackman be part of the solution? Right now, it sounds up in the air.
by Sean O'Connell December 6, 2013 comments
Three Ways The Wolverine Unleashed Extended Edition Is Better Than The Theatrical Cut, And One Way It Isn't
With The Wolverine set to arrive on Blu-ray on December 3rd and now available on Digital HD, last night I was invited to attend a special screening on the 20th Century Fox Lot in Los Angeles to watch the premiere of the never-before-screened, unrated cut of the film that has been dubbed the Unleashed Extended Edition.
by Eric Eisenberg November 19, 2013 comments
Hugh Jackman Planned A Wolverine And Spider-Man Crossover, And You'll Never Believe Why It Didn't Happen
Would you believe that, at one point, Wolverine was supposed to cross paths with Spider-Man? The Huffington Post about his big Toronto hit Prisoners, Jackman allowed a tangent about this summer's The Wolverine to lead to some speculation about whether or not Jackman himself could just show up in a Marvel Studios film, without any official Fox permission. As it turns out, that's not such a crazy idea-- he tried to do it on Sam Raimi's first Spider-Man
by Katey Rich September 10, 2013 comments
Hugh Jackman Denies Being Offered $100 Million For Another Decade Of Wolverine
While this most recent standalone film definitely wasnt one of the summers money-gobbling failures, it did take a steep drop after its opening weekend in July. And while it will no doubt make its budget back here in the U.S., it wasnt the massive success that will immediately green light more films.
by Nick Venable August 16, 2013 comments
5 Superheroes Who Deserve R-Rated Movies (And Might Actually Get One Someday)
If anyone tells you that comic books are just for kids then you can be sure that that person doesnt actually read comic books. Even in the typically-child friendly world of superheroes there are plenty of books filled with sex, violence, profanity and other material meant to appeal to adults and adults alone.
by Eric Eisenberg August 15, 2013 comments
Hugh Jackman Offered $100 Million To Play Wolverine 4 More Times?
X-Men have been played on screen by Oscar winners and stage legends and the owner of some extremely famous, uh, hardware. But there is only one X-Man who is incredibly famous for playing the mutant, and that's Hugh Jackman-- which makes him incredibly valuable to the franchise as it goes forward
by Katey Rich August 12, 2013 comments
Wolverine The Musical! Will Claw Its Way To Your Funny Bone
And its not just Wolvie, either. Hes joined by a bunch of very smarmy Multiple Men, the Hulk, and Spider-Man, who loses his head over the situation. Its a hit from beginning to end, and definitely edges out Jackmans own version of a Wolverine-themed musical.
by Nick Venable July 19, 2013 comments
Hugh Jackman Suggests The Wolverine Could Be His Last Solo Movie As The Character
While Hugh Jackman's Wolverine was unquestionably the most popular character of the X-Men trilogy, his first solo effort as the character put a pretty serious dent in the franchise. The film was a decent success at the box office, but it was torn apart by critics and left a bad taste in audience's mouths that some suggest resulted in X-Men: First Class not performing as well in theaters as all of the other movies in the series.
by Eric Eisenberg June 3, 2013 comments
Hugh Jackman Confirms One Of The X-Men Will Cameo In The Wolverine
"My character is at his lowest. He is supposed to be able to heal himself, but he may encounter someone who has worked out a way to really hurt him, Jackman said. And there is a cameo from one of the past X-Men in it."
by Sean O'Connell December 23, 2012 comments
Hugh Jackman Dances Gangnam Style With Psy On Wolverine Set
In the wake of Carly Rae Jepsen's "Call Me Maybe," it was an unlikely pop song out of Korea called "Gangnam Style" that overtook American pop culture, not only with its largely incomprehensible yet catchy tune but also its easy and fun signature dance. Now Psy, the South Korean rapper behind this offbeat single, has taken his fame to the next level by teaming up with Hugh Jackman do dance Gangnam Style while both don Wolverine's trademark adamantium blades.
by Kristy Puchko October 17, 2012 comments
Check Out These Posters For Modern Movies Re-Imagined With Classic Casts
As a medium, film is one that is eternally looking back. Whether it be mining past hits for sure-to-score remakes, alluding to past works with visuals or music, or describing contemporary actors along the lines of well established stars, the film industry loves to revel in its own history. Inspired by moviemaking's inherent fascination with its own past...
by Kristy Puchko January 16, 2012 comments
The Queen's Peter Morgan Sells Heist Script To New Line
British writer Peter Morgan has made a name for himself penning awards-friendly, character-centric dramas such as The Last King of Scotland, The Queen, and Frost/Nixon. With the upcoming remake of Tinker Tailor Soldier Spy hes branching out into thriller territory, and now hes tackling yet another time-honored genre: the heist flick. New Line has picked up Morgans untitled heist screenplay, to be produced by Simon Kinberg.
by David Wharton December 3, 2011 comments
First Look At Darren Aronofskys Graphic Novel Noah
Back in February we learned that Darren Aronofsky had set his sights on directing a religious epic around the story of Noah and his famous ark. However, even with his impressive showing with Black Swan, landing some cash for the project was going to be a struggle. Never a man to follow the beaten path, Aronofsky took a unique approach to courting financiers and teamed up with artist Nico Henrichon to create a graphic novel of the story to aid his pitches.
by Will LeBlanc October 21, 2011 comments
Hugh Jackman Says The Wolverine Could Get An R-Rated Cut
Jackmans also savvy enough to admit in the clip that his audience base is younger than 17, and no studio in their right mind is going to alienate potential ticket buyers by delivering an R-rated, disturbing cut of a comic book character just to satisfy a small, dedicated niche.
by Sean O'Connell October 11, 2011 comments
The Next Wolverine Starts Shooting In October
Things are coming together for the next Wolverine movie. They have a director in James Mangold, Hugh Jackman is ready to go, and now the film has a start date. Expect The Wolverine to begin shooting in October, which probably means Fox aims to have it in theaters for 2012.
by Josh Tyler June 29, 2011 comments
Wolverine 2 Hiring Walk The Line's James Mangold To Direct?
Mangold is Foxs current choice to take the Wolverine 2 directing gig, and they believe hell take the job. Fox wants to shoot the movie this fall, so theyll be motivated to get this deal done. Like Aronofsky, Mangold once directed an Oscar nominated film.
by Josh Tyler June 15, 2011 comments
Duncan Jones Is Talking To Fox About Directing Wolverine, But Will He Take The Job?
Jones is certainly an interesting choice to take over for Aronofsky on Wolverine, another director who got his start in independent films and has a distinct vision (even though I thought Source Code was too generic and beneath Jones's skills, it has enough positive reviews to prove me wrong)
by Katey Rich April 11, 2011 comments
Wolverine Leaker Going To Jail
Sanchez is still the only one that's been charged in what could be the most famous movie leak of all time. But why? I'm not saying Sanchez shouldn't be punished. Studios invest hundreds of millions in summer blockbusters. They have every right to protect their intellectual property, but the biggest asshole on the block here is the employee who leaked it to begin with. Why is he not sitting in jail?
by Mack Rawden March 31, 2011 comments
Cinema Con Exclusive Video: Hugh Jackman Talks Real Steel, Being Wolverine For The Rest Of His Life
I asked him about how different this film's tone might be from those comedies, how much of an all-ages movie Real Steel might be, and pressed them for details about the film's "hero robot" Atom, who is brought up out of a junkyard by Jackman's character and his son
by Katey Rich March 29, 2011 comments
Great Debate: Is Darren Aronofsky Leaving The Wolverine Really A Bad Thing?
The difference between us was never more obvious than today, when Darren Aronofsky walked away from The Wolverine; Eric was despondent to hear that such a talented director wouldn't be tackling a superhero story, while Katey was thrilled that he'd be using his Black Swan clout to make a story that's entirely his own.
by Katey Rich and Eric Eisenberg March 17, 2011 comments
The Real Reason Darren Aronofsky Isn't Directing Wolverine 2
This morning we heard from one of our long-time scoopers (the same person who broke the news that Favreau was on the outs with Marvel months before he announced he would no longer be involved in directing Marvel films) with the inside track on what may have really happened between Aronofsky and Fox.
by Josh Tyler March 17, 2011 comments
Wolverine 2 To Be Titled The Wolverine, Will They Ignore The Other Movie?
There are a lot of different ways a studio can go with a sequel, especially if a new director is brought in. Without any preconceptions or biases toward the first installment, a new director is, in many ways, a lot more free
by Mack Rawden November 13, 2010 comments
Updated: Did Hugh Jackman Just Film A Cameo In X-Men: First Class?
With First Class filming on Jekyll Island right now, it's pretty much the only explanation for why Hugh Jackman would have been visiting that beach town in November
by Katey Rich November 1, 2010 comments
A.M. Awesome: Marvel Characters Enter The Tron Universe In A Disney Crossover
Next months issue of Wired (holy cow a print magazine!) will feature 10 collectible covers all featuring Marvel characters that have been Tron-ified, as they so lovingly put it
by Will LeBlanc October 19, 2010 comments
Darren Aronofsky Chosen To Direct Wolverine 2
Wolverine should have been better. Maybe the sequel will be. Until today there was no reason to believe this was a possibility, the whole X-Men franchise was turned
by Josh Tyler October 5, 2010 comments
UPDATED: Clash Of The Titans 2 And Deadpool Still Don't Have Directors, But They're Getting Closer
Things are looking a little worse for Liebesman and Warner Bros. as they try to hammer out a Clash of the Titans deal, since apparently "they are
by Katey Rich August 30, 2010 comments
Around The Web


text:
Chemical process.
Solvation - a molecular-dynamic process. Enveloping the
active substance molecules of fat.
CH3 (CH2) 14COOH - a key component of milk fat, palmitic acid
C12H25SO4Na - detergent (sodium dodetsilsulfonat)
Loading more stuff…
Hmm…it looks like things are taking a while to load. Try again?
TM + © 2015 Vimeo, LLC. All rights reserved.
Made with k in NYC.
Your content preferences apply to any Vimeo videos you view. Learn more about content preferences in our FAQ.


text:
Red Sox regulars in Port Charlotte against Rays
|02.25.13 at 12:50 pm ET
PORT CHARLOTTE, Fla. — Torey Luvullo managed the Red Sox lineup of regulars that made the 45-minute trip north on I-75 Monday morning to take on the Tampa Bay Rays.
Monday's lineup:
Jacoby Ellsbury CF
Dustin Pedroia 2B
Shane Victorino RF
Jonny Gomes LF
Stephen Drew SS
Ryan Sweeney DH
Drew Sutton 3B
Mike Carp 1B
David Ross C
Alfredo Aceves P
Lovullo said Aceves was expected to get two innings of work and 35 pitches before Daniel Bard comes on for an inning.
Other notes: Felix Doubront threw 31 pitches in a two-inning simulated game Monday at JetBlue Park.
On Bard, Chris Hernandez and Terry Doyle following Aceves: "We've got Bardo, Hernandez and doyle. After that, go to younger kids. Goal right now is to get everybody their work in, get everyone up to their pitch counts, then make adjustments as needed. Pretty much the plan."
MLB executive Tony LaRussa was in town to talk to Joe Maddon on Monday morning about MLB rule changes this year, most prominently the change that makes the fake throw to third and then first a balk this year. Maddon wasn't a big fan and said teams will adjust. Lovullo agreed.
"I think it gives the baserunners a little bit more of an advantage to steal bases," said Lovullo, who is serving as Farrell's bench coach. "They're very aware of the first to third move, which might slow their initial jump. We think there might be some new trending in holding runners on third base. You might see managers holding runners at third base as if they're on first base. We're not exactly sure what's going to happen. We're prepared for anything, because of the change. Moving forward, we think it's going to help us more than anything.
On Bard: "As he's starting to move forward, I think he's on the right track and things are moving in a really positive direction for him. He's comfortable and confident of getting back to the form that we're all expecting. We don't want to make much of it, other than letting him go out there and doing his thing and showing us where he's at."
On Farrell: "returning" to face Blue Jays in Dunedin Monday: "Sure there's going to be mixed emotions on both sides. John will go out there and handle it well." Lovullo was Farrell's first base coach for two seasons in Toronto before being hired to serve as Farrell's bench coach in Boston.
On returning to Toronto on Friday, April 5: "I think [Red Sox third base coach] Brian Butterfield will have that place torn down, because they love him there. He's going to get a standing ovation. Wait for that one. Remember I said it. But deservedly so. He spent a lot of time there and did some incredible things."
On his experience in Toronto: "Personally speaking, I spent two really good years there. I have nothing but fond memories of the front office to the people inside the clubhouse, they're my friends and I miss them. I'll be anxious to get up there and say hello to them. However the fans perceive that and what I may encounter up there, it's up to them."
On what Yunel Escobar, whom he knew in Toronto the last two seasons, will mean to Rays at shortstop: "As far as tools and overall raw stregnth, he's top of the list. He makes every play look easy. It's a new fresh start for him and I know he's probably going to take his game to the next level and become an elite shortstop, which he certainly has the capabilities of becoming. He's a special guy with a special baseball mind."
For more, visit the Red Sox team page at weei.com/redsox.
Latest from Bleacher Report
- Unexpected Trades Red Sox Could Pull Off This Offseason
- Dream Free-Agent Pickups for Red Sox
- Red Sox Free Agency News and Trade Rumors
- Should Red Sox Trade Cespedes This Offseason?
- Red Sox's Most Tradeable Assets for Offseason
- Uehara Inks 2-Year Extension with Sox
- Possible Trade Partners, Packages for Cespedes
- Scouting Scratch: Young Arms
- 2015 Spring Training Reports
- Dubon taking journey from Honduras to the majors one stop at a time
- The Write-Up: Clay Buchholz
- Fort Report: Cuts, injuries and positional battles
- System Restart 2015, Pt. 1: Catchers
- With new delivery honed, Haley looks to build on breakout season
- Scouting Scratch: Yoan Moncada
- Owens reassigned to minors in latest roster cuts; Boggs released
- The Write-Up: More reports from Fort Myers


text:
Central Florida Fishology
For Shore Fishing
Endangered & Drained
A Good Hunt
Backpacker's Blaze
Latest Articles
Florida Tides for March 27
Saturday: Highs at 8:24 a.m. and 7:15 p.m. Lows at 1:53 a.m. and 1:31 p.m.
Sunday: Highs at 9:35 a.m. and 8:44 p.m. Lows at 3:14 a.m. and 3:06 p.m.
Outdoors Notebook: Tenoroc Youth Fishing Derby on April 4
The 22nd annual Tenoroc Fish Management Area and Youth Conservation Center Youth Fishing Derby is on Saturday, April 4.
Upcoming Fishing Tournaments Around Polk County (March 26)
THE MOSAIC BASS CLUB will be on Lake Arbuckle out of the county campground Saturday. Safe light to 2 p.m. Ramp fee $5. Club for Mosaic employees only. Call Richard Blair at 863-844-5037.
Florida Tides for March 20
Saturday: Highs at 1:19 a.m. and 1:29 p.m. Lows at 7:51 a.m. and 8:17 p.m.
Sunday: Highs at 2:06 a.m. and 2:02 p.m. Lows at 8:27 a.m. and 9:01 p.m.
Outdoors Notebook: Tilapia Hot at Saddle Creek, in Canals
Tilapia are bedding at Saddle Creek Park in Lakeland and bank anglers have been loading up. "They've been filling buckets with them,'' Stacy Roberts at Phillips Bait and Tackle said last week.
Upcoming Fishing Tournaments Around Polk County (March 19)
The New Rebel Boys Bass Club will fish on Lake Kissimmee Saturday out of the State Road 60 ramp accepting new members.


text:
The Top 10 In Action Sports
01Sailing Into A Cyclone: This Has To Be One Of The Most Dangerous Races On Earth
02Ever Wanted To Own Your Own Ski Resort? Now You Can... For Just $900,000
03This is What Happened When Three Pros Tried To Go Mountain Biking on a Glacier
04Dirt Jumps, Zebras and A Motocross Legend: This Red Bull Feature is Essential Viewing For Any MX Fan
05Introducing The Greatest Skateboarder You've Never Heard Of… And He's Only 11 Years Old
06This is What It Looks Like To Break The World Record For The Fastest Time on a Bike
07This All-Action Edit Encapsulates Every Single Reason We Should All Love Motocross
08A Glacier The Size Of Manhattan Has Disappeared, And These Guys Got It On Film
09Cork 720s and Flipping Madness: The World's Best Slopestyle Stars Just Opened the MTB Season in Style
10Win a Holiday for 2 in Chamonix with Three #holidayspam
Where's Sancho? Surfing Monaco
A Surfing video by surfersmag - 13,158 views
Benjamin "Sancho" Sanchis and Tim Boal scored some epic waves in Monaco.
Filmed and Edited by Pietro l.Franca
Helicopter Shots by OBEAHPROD
Credits ATOPIC Films
Music:The Ravounettes
What Do You Think?
Get the best in action sports straight to your inbox


text:
I am very interested in these tables, but really need the dimensions of the 2 smaller ones before ordering. Do you have this information available now? Thanks.
we're pleased with the product, we had been looking for nested tables with a bit of a rustic look without paying the high end price. The finish of the tables is more finished than i would like, but it works well in our home. The packaging was great, arrived promptly, and no scratches of any sort....
Creek Classics Rustic Nested Tables (Set of 3)
Have plenty of table surface with this set of rustic nested tables. Available in a set of three sizes, these wood and iron tables offer a distressed finish and wood-grain details for additional aesthetic value. The legs have a textured black finish.
- Details
- Shipping & Returns
- Reviews
ITEM#: 14837708This set of three nesting accent tables is both functional and beautiful. The hand-hewn rustic tabletops have a distinct wood grain, chamfered corners and character marks for plenty of interest.
- Set includes: Three (3) nesting tables
- Materials: Wood/iron
- Finish: Textured black
- Metal base
- Chamfered corners
- Distinct wood grain details
- Dimensions: 23.5 inches tall x 23.5 inches wide x 15 inches deep
|Iron Metal Wood
|Accent Tables Nesting Tables
|Black Finish Textured
|See description
|Manufacturer Warranty
|30 day Manufacturer
|See description
|Model Number
Product Reviews
- Disclosures & Guidelines
- Filter By:
- Most Recent
looks just like the picture
we're pleased with the product, we had been looking for nested tables with a bit of a rustic look without paying the high end price. The finish of the tables is more finished than i would like, but it works well in our home. The packaging was great, arrived promptly, and no scratches of any sort.Read More
Just right
Been looking for the perfect nesting tables these hit the spot! Very sturdy and look expensiveRead More
Nesting tables
Tables were delivered within a week after ordering. Perfect for casual living in our family room. This is my fifth furniture order; no worry about ordering from Overstock because of excellent customer service.Read More
Gorgeous tables
This tables are a knockout. The rustic finish of the table top is very attractive. They are solidly constructed and require no assembly. I love that the tables stack over each other. My living room is small, so I decided against a coffee table, and am using these tables as side tables. I keep one table nested underneath the largest table and pull it out to serve as a (slightly too high) coffee table if necessary.Read More
Questions & Answers
Hello ginaharper, unfortunately this item is out of stock. We currently do not have inventory to check, and cannot guarantee the item will be restocked. Thank you for shopping with us.
how would you describe the metal finish on the legs?
Hello rclow20, these have a rustic, black/brown finish. Thank you for shopping with us.
What is the wood used for the table top? And what color are the metal frames? thanks.
Hello mcbobber, this is poplar wood and the frames are a rustic black/brown finish. I hope that helps you. Thank you for shopping with us.
can you please tell me the dimensions of each table? Also, are the dimensions on the product details section accurate? The picture doesn't look like the tables are square 23.5 x 23.5 Thank you
The largest table is 23.5 inches wide x 15 inches deep x 23.5inches tall. This is more of a rectangle rather than square. We do not have the exact dimensions for the inner 2 tables, however they do fit inside each other with approximately .25" of space.
Shopping Guides
Tips on Buying Bistro Sets
Create an elegant breakfast for two on your patio when you buy bistro sets for your home. Whether you want wrought-iron bistro sets to add a sophisticated touch to your backyard or a wicker bistro set for a classic, vintage style, the following suggestions will help you find the right outdoor dining tables and chairs to seat you and a friend. Read on for tips on buying bistro sets.
Top Puzzles and Games for Christmas
Puzzles and board games can bring the family together, challenge the mind, and keep everyone from small children to adults entertained. They also make excellent Christmas gifts for friends, co-workers, and relatives. With so many benefits, you'll want to make sure to add a few of these games and puzzles to your Christmas shopping list.
Safety Features to Look for in a Nursery Furniture Set
It's easy to buy a nursery furniture set that looks good, but finding one that is safe for your baby takes closer inspection. Your baby's safety comes before all else, and the nursery is where your baby is going to spend most of his time. The right baby furniture set can make all the difference when you're looking to build a safe, secure nursery for your child. How do you know that the nursery furniture set you've chosen is going to be safe enough for your baby? The following tips can help you determine whether or not the baby furniture you're considering for the nursery is going to make the cut.
How to Size Your Room For an Area Rug
A rug in the right size can complement the whole room, accent furnishings, bring life to a dull room, or make a subtle statement. However, if it's too big or too small, it may leave the impression of an unfinished or poorly decorated room. Before you start shopping for area rugs, you'll want to size the room. This guide will help you to select the right size rug in any room.
Best Mother's Day Gifts for Stay-at-Home Moms
She's been there for your family every step of the way, and she probably made your bed for you more than you let on. If your mom or wife is a stay-at-home mom (and nearly half of the mothers in America are), show her how much you appreciate her with the best Mother's Day gift.
5 Summer Grilling Recipes
When the weather warms up, it's time to get fired up for some outdoor cooking. Cooking up burgers and hot dogs always pleases a crowd, but if you really want to impress your guests, you'll want to get more creative. Whether you like eating light or you prefer a juicy steak, there's a summer recipe that will inspire you to dust off the grill. Read our summer grilling tips to get help preparing your barbecue, and then try these five fun recipes.
Neckties Buying Guide
As one of the few accessories for men, neckties get a lot of attention. Ties complete a suit, show respect in a formal setting, add color to an outfit, and make excellent gifts. This buying guide has tips on buying men's neckwear for yourself or for a gift, tying and wearing ties properly, and keeping your ties looking great.
Shipping & Returns
Usually leaves our warehouse in 1-2 business days. *
Standard Return Policy:
Items must be returned in new or unused condition and contain all original materials included with the shipment. More Details
FINAL SALE EXCLUSION: Items marked as FINAL SALE are not returnable unless the problem you experience is the result of our error.
This item cannot be shipped to Alaska or Hawaii. More details
Shipping Information:
Our standard shipping method is ground shipping. We also offer expedited shipping for most items. Your final
shipping cost and estimated delivery timeframe will be available at checkout.
Standard shipping details
Expedited shipping details
* For your protection, all orders are screened for security purposes. If your order is selected for review, our Loss Prevention Team may contact you by phone or email. There may be a two business day delay to process your order.
** Most Oversize orders are delivered within 1-4 weeks. Some orders may take 6 weeks to be delivered.


text:
Roses are red,
Violets are blue,
Some poems rhymn,
But this one doesn't
Ah ... they don't write poems like this anymore...
My Mom the Radio Star
Max Maxfield Post a comment
I've said it before and I'll say it again -- it's a funny old world when you come to think about it. Last Friday lunchtime, for example, I received an email from Tim Levell, the editor for ...
A Book For All Reasons
Bernard Cole 3 comments
Robert Oshana's recent book "Software Engineering for Embedded Systems (Newnes/Elsevier)," written and edited with Mark Kraeling, is a 'book for all reasons.' At almost 1,200 pages, it ...
Leonard Nimoy, We'll Miss you
Martin Rowe 5 comments
Like many of you, I was saddened to hear the news of Leonard Nimoy's death. His Star Trek character Mr. Spock was an inspiration to many of us who entered technical fields.
Making the Grade in Industrial Design
Rich Quinnell 16 comments
As every developer knows, there are the paper specifications for a product design, and then there are the real requirements. The paper specs are dry, bland, and rigidly numeric, making ...