Café, caFe, cafe, façade, naive, naïve, résumé, resume.
<h:panelGrid columns="3"> <h:outputText value="Search term:"/> <p:inputText id="searchInput" value="#{diacriticsMarkTextController.searchTerm}" placeholder="Enter search term"> <p:ajax event="keyup" delay="500" update="searchContainer markText"/> </p:inputText> <p:commandButton value="Highlight" update="searchContainer markText" icon="pi pi-search"/> </h:panelGrid> <h:panelGrid columns="2" style="margin-top:10px"> <h:outputText value="Consider diacritics:"/> <p:selectBooleanCheckbox value="#{diacriticsMarkTextController.diacritics}"> <p:ajax update="markText searchContainer" process="@this"/> </p:selectBooleanCheckbox> </h:panelGrid> <p:panel id="searchContainer" header="Searchable Content" style="margin-top: 20px"> <h:panelGroup id="searchContent" layout="block"> <p>#{diacriticsMarkTextController.processedText}</p> </h:panelGroup> </p:panel> <pe:markText id="markText" widgetVar="markTextWidget" for="searchContent" value="#{diacriticsMarkTextController.searchTerm}" diacritics="#{diacriticsMarkTextController.diacritics}" styleClass="marktext-highlight"> <p:ajax event="mark" listener="#{diacriticsMarkTextController.onHighlight}"/> </pe:markText>
@Named @ViewScoped public class DiacriticsMarkTextController implements Serializable { private static final long serialVersionUID = 1L; private String searchTerm = "cafe"; private Boolean diacritics = Boolean.TRUE; private String processedText = "Café, caFe, cafe, façade, naive, naïve, résumé, resume."; private List<String> lastMatchedTerms = new ArrayList<>(); private List<MarkPosition> lastPositions = new ArrayList<>(); public String getSearchTerm() { return searchTerm; } public void setSearchTerm(String searchTerm) { this.searchTerm = searchTerm; } public Boolean getDiacritics() { return diacritics; } public void setDiacritics(Boolean diacritics) { this.diacritics = diacritics; } public String getProcessedText() { return processedText; } public void setProcessedText(String processedText) { this.processedText = processedText; } public List<String> getLastMatchedTerms() { return lastMatchedTerms; } public List<MarkPosition> getLastPositions() { return lastPositions; } public void onHighlight(MarkEvent event) { this.lastMatchedTerms = event.getMatchedTerms(); this.lastPositions = event.getPositions(); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mark Event Triggered", "Found " + lastMatchedTerms.size() + " matched terms and " + lastPositions.size() + " positions.")); } }