<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html">

<h:head></h:head>
<body>
	<h:messages id="messages" globalOnly="true" />
	<br />
	<h:form id="converter">
		Converterd Value :
		<h:inputText id="convertedValue" value="#{myBean.convertedValue}">
			<f:converter converterId="myValueConveter" />
		</h:inputText>
		<h:message id="errorMessage" for="convertedValue" />
		<br />
		<h:commandButton id="testConveterButton"
			action="#{myBean.testAction()}" value="Test Conveter" />
	</h:form>
	<h:form id="validator">
		Value String:
		<h:inputText id="stringValue" value="#{myBean.stringValue}">
			<f:validator validatorId="myBeanValidator" />
		</h:inputText>
		<h:message id="errorMessage" for="stringValue" />
		<br />
		<h:commandButton id="testValidatorButton"
			action="#{myBean.testAction()}" value="Test Validator" />
	</h:form>
</body>
</html>
