Watermark displays a hint about input fields by using native placeholder in modern browsers and a javascript based solution in legacy ones for browser compatibility. In case legacy browsers don't need to be supported, placeholder attribute of input components should be preferred.
<div class="card">
<h:form>
<p:messages id="messages" showDetail="true"/>
<h:panelGrid columns="3" cellpadding="5" style="margin-bottom:10px">
<h:outputLabel value="Search: "/>
<p:inputText id="keyword" value="#{watermarkView.keyword}" required="true" label="Keyword"/>
<p:watermark for="keyword" value="Search with a keyword" id="watermark"/>
</h:panelGrid>
<p:commandButton id="regular" action="#{watermarkView.search}" value="Regular" ajax="false"/>
<p:commandButton id="ajax" action="#{watermarkView.search}" value="Ajax" styleClass="ml-2"
onclick="PrimeFaces.cleanWatermarks();" oncomplete="PrimeFaces.showWatermarks();"
update="messages"/>
</h:form>
</div>
@Named
@RequestScoped
public class WatermarkView {
private String keyword;
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
public void search() {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "No results found with ", "'" + keyword + "'"));
}
}