I am trying to dynamically add Labels and textfields from Primefaces to my webpage. I want to use JQuery. Until now I realize the same task with Primefaces only and it works qui
Looks like you completely missed the point of JSF and are rather new to web development. JSF is a server side language/framework which produces HTML code (rightclick page in browser and do View Source, do you see it now? no single JSF tag, it's one and all HTML). jQuery is a client side language which works with HTML DOM tree only. The <p:inputText>
is not a known HTML element. The browser don't have any idea how to deal with it. It only knows HTML like <input>
and friends.
You need to salvage the functional requirement in a "JSF-ish" way. Here's a kickoff example:
<h:form>
<ui:repeat value="#{bean.items}" var="item">
<p:outputLabel for="foo" value="#{item.label}" />
<p:inputText id="foo" value="#{item.value}" />
<p:commandButton value="Remove" action="#{bean.remove(item)}" update="@form" />
<br/>
</ui:repeat>
<p:commandButton value="Add" action="#{bean.add}" update="@form" />
</h:form>
with
@ManagedBean
@ViewScoped
public class Bean implements Serializable {
private List<Item> items;
@PostConstruct
public void init() {
items = new ArrayList<>();
}
public void add() {
Item item = new Item();
item.setLabel("label" + items.size());
items.add(item);
}
public void remove(Item item) {
items.remove(item);
}
public List<Item> getItems() {
return items;
}
}
and
public class Item {
private String label;
private String value;
// Let your IDE generate getters/setters/equals/hashCode.
}
That's all. No JavaScript mess necessary and everything is ready for save in server side by just adding another command button pointing to a save()
method which passes the items
variable further to the EJB/service/DAO class.
Otherwise, if you really want to do it the jQuery way, then you should drop JSF altogether and go for something request-based like Spring MVC. You only need to keep in mind that you've to write down all that HTML/CSS/JS yourself.