InputTextarea extends standard InputTextarea with autoComplete, autoResize, remaining characters counter and theming features.
<p:growl id="growl" showSummary="true" showDetail="true" keepAlive="true" life="3000">
<p:autoUpdate/>
</p:growl>
<div class="card">
<h:form>
<h5>AutoResize</h5>
<p:inputTextarea rows="6" cols="33"/>
<h5>Remaining Chars</h5>
<p:inputTextarea rows="5" cols="30" counter="display" maxlength="10"
counterTemplate="{0} characters remaining." autoResize="false"/>
<h:outputText id="display" class="block" />
<h5>AutoComplete</h5>
<p>Following inputTextarea send a query for each word that has at least 4 characters to the complete method. Try typing "PrimeFaces".</p>
<p:inputTextarea rows="10" cols="50" completeMethod="#{inputTextareaView.completeArea}" queryDelay="750"
minQueryLength="4">
<p:ajax event="itemSelect" listener="#{inputTextareaView.onSelect}"/>
</p:inputTextarea>
</h:form>
</div>
package org.primefaces.showcase.view.input;
import jakarta.enterprise.context.RequestScoped;
import jakarta.faces.application.FacesMessage;
import jakarta.faces.context.FacesContext;
import jakarta.inject.Named;
import java.util.ArrayList;
import java.util.List;
import io.quarkus.runtime.annotations.RegisterForReflection;
import org.primefaces.event.SelectEvent;
@Named
@RequestScoped
@RegisterForReflection(serialization = true)
public class InputTextareaView {
public List<String> completeArea(String query) {
List<String> results = new ArrayList<>();
if ("PrimeFaces".equals(query)) {
results.add("PrimeFaces Rocks!!!");
results.add("PrimeFaces has 100+ components.");
results.add("PrimeFaces is lightweight.");
results.add("PrimeFaces is easy to use.");
results.add("PrimeFaces is developed with passion!");
} else {
for (int i = 0; i < 10; i++) {
results.add(query + i);
}
}
return results;
}
public void onSelect(SelectEvent<String> event) {
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "select", event.getObject()));
}
}