Details
Description
<textarea> used as a passthrough element cannot be rendered.
Use the following facelet:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
xmlns:jsf="http://xmlns.jcp.org/jsf">
<head jsf:id="head">
<title>Email Test</title>
</head>
<body jsf:id="body">
<form jsf:id="form">
<input type="text" jsf:id="name"
placeholder="Enter name"
jsf:value="#
"/>
<br/>
<br/>
<input type="text" jsf:id="email-address"
placeholder="Enter email address"
jsf:value="#
"/>
<br/>
<br/>
<textarea jsf:id="contact-message"
name="comments"
placeholder="I wanna talk about..."
jsf:value="#
"/>
<br/>
<br/>
<button type="submit" jsf:action="#
">Send Email</button>
</form>
</body>
</html>
You'll see an error similar to the following:
/email-test.xhtml at line 25 and column 64 <textarea> Tag Library supports namespace: http://xmlns.jcp.org/jsf/html, but no tag was defined for name: inputTextArea
viewId=/email-test.xhtml
location=/path/to/file
phaseId=RENDER_RESPONSE(6)
Caused by:
javax.faces.view.facelets.TagException - /email-test.xhtml at line 25 and column 64 <textarea> Tag Library supports namespace: http://xmlns.jcp.org/jsf/html, but no tag was defined for name: inputTextArea
at org.apache.myfaces.view.facelets.compiler.CompilationManager.pushTag(CompilationManager.java:300)
Replace MyFaces with Mojarra 2.2.9+ and the facelet will render.
You may also want to check if the textarea's value will be passed to a backing bean. The message field's value is never set in the backing bean for Mojarra. I have to use h:inputTextarea for the backing bean's value for that field to be set.
In case you need it for convenience's sake, here's the backing bean:
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
/**
*
- @author Chris Harris
*/
@Named
@RequestScoped
public class ContactUs implements Serializable {
private static final long serialVersionUID = -1L;
private String fromName, fromEmail, message;
public void setFromName(String fromName)
{ this.fromName = fromName; }public String getFromName()
{ return this.fromName; }public void setFromEmail(String fromEmail)
{ this.fromEmail = fromEmail; }public String getFromEmail()
{ return this.fromEmail; }public void setMessage(String message)
{ this.message = message; }public String getMessage()
{ return this.message; }public void submit()
{ System.out.println("Here's the data..."); System.out.println("fromName: " + fromName); System.out.println("fromEmail: " + fromEmail); System.out.println("message: " + message); }}