The quick brown fox jumps over the lazy dog. Running is essential for fitness. Programming and design go hand in hand.
<h:panelGrid columns="2" columnClasses="label,value"> <h:outputText value="Search term:"/> <p:inputText id="searchInput" value="#{markTextWildcardController.searchTerm}" placeholder="Enter search term"> <p:ajax event="keyup" delay="300" update="markText" process="@this"/> </p:inputText> <h:outputText value="Wildcard Mode:"/> <p:selectOneMenu id="wildcards" value="#{markTextWildcardController.wildcards}"> <f:selectItem itemValue="disabled" itemLabel="Disabled" /> <f:selectItem itemValue="enabled" itemLabel="Enabled (no spaces)" /> <f:selectItem itemValue="withSpaces" itemLabel="Enabled (with spaces)" /> <p:ajax event="change" update="markText" process="@this"/> </p:selectOneMenu> </h:panelGrid> <p:panel id="searchContainer" header="Searchable Content" style="margin-top: 20px"> <p>#{markTextWildcardController.processedText}</p> </p:panel> <p:panel id="backendDataPanel" header="Backend Data from Mark Event Listener" style="margin-top: 20px"> <h:outputText value="Last Matched Terms: #{empty markTextWildcardController.lastMatchedTerms ? 'No data received yet' : markTextWildcardController.lastMatchedTerms}" /> <br/> <h:outputText value="Last Positions: #{empty markTextWildcardController.lastPositions ? 'No data received yet' : markTextWildcardController.lastPositions}" /> </p:panel> <pe:markText id="markText" for="searchContainer" value="#{markTextWildcardController.searchTerm}" wildcards="#{markTextWildcardController.wildcards}" styleClass="marktext-highlight" caseSensitive="false"> <p:ajax event="mark" listener="#{markTextWildcardController.onHighlight}" update="backendDataPanel messages" /> </pe:markText>
@Named @ViewScoped public class MarkTextWildcardController implements Serializable { private static final long serialVersionUID = 1L; private String searchTerm = "r*n"; private String wildcards = "enabled"; // disabled | enabled | withSpaces private String processedText = "The quick brown fox jumps over the lazy dog. " + "Running is essential for fitness. " + "Programming and design go hand in hand."; 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 String getWildcards() { return wildcards; } public void setWildcards(String wildcards) { this.wildcards = wildcards; } public String getProcessedText() { return 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.")); } }