JSF inputText als Parameter verwenden

sagi7

Mitglied
Hallo Zusammen,

ich beginne im Moment mit JSF und möchte den Inhalt eines inputText als Methodenparameter verwenden.
Die Methode wird aufgerufen, jedoch ist der Parameter null.
Mein 2. Versuch war, den InputText via EL an eine BackingBean Property zu binden - diese ist jedoch ebenfalls null.
Was mache ich falsch?
Folgend die JSF Seite:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">
	<h1>Kategorien verwalten</h1>
	<h:form acceptcharset="ISO-8859-1">
		<p:growl id="growl" showDetail="true" sticky="true" />
		<h:panelGrid columns="3">
			<h:outputLabel value="Neue Top Kategorie: " />
			<h:inputText id="newRootC" value="#{newCategory}"/>
			<h:commandButton value="Neue Kat" immediate="false"
				action="#{categoryController.createRootCategory(newRootC)}">
			</h:commandButton>
			<p:message for="newRootC" showDetail="true" showSummary="true"></p:message>
		</h:panelGrid>
	</h:form>
	<ui:define name="title">Kategorien verwalten</ui:define>
</ui:composition>

und die BackingBean:

Code:
@javax.faces.bean.RequestScoped
@Named
public class CategoryController implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 779934672809088513L;
	@Inject
	private CategoryService categoryService;
	private Category currentCategory;

	@Inject
	private Logger logger;

	@NotNull
	@Length(min = 3)
	private String newCategory;

	public String createRootCategory() {

		Category newCat = new Category();
		newCat.setName(getNewCategory());
		categoryService.createRootCategory(newCat);
		return "success";
	}

	public String createRootCategory(String name) {
		Category newCat = new Category();
		newCat.setName(name);
		categoryService.createRootCategory(newCat);
		return "success";
	}

	public Category getCurrentCategory() {
		return currentCategory;
	}

	public String getNewCategory() {

		return newCategory;
	}

	public String saveCategory() {
		categoryService.saveCategory(currentCategory);
		return "success";
	}

	public void setCurrentCategory(Category currentCategory) {
		this.currentCategory = currentCategory;
	}

	public void setNewCategory(String newCategory) {
		this.newCategory = newCategory;
	}

}

Das Ganze läuft auf Wildfly CR1.

Vielen Dank schon mal im Voraus
 
Woher soll denn der Wert für die Methode kommen?
Deine Bean ist mit der View verbunden und da kommt du doch an die Werte von z.B. Eingabefeldern...

Gruß
navino
 
Hallo,

ja kann ich:
du muss das inputField an deine Bean mappen:
<h:inputText id="newRootC" value="#{meineBean.newCategory}"/>

und deiner Bean einen Namen geben:
@ManagedBean(name="meineBean")

das war's.

Beim Drücken eines commandButton hast du den Wert in deiner Bean im propertie: newCategory

Gruß
navino
 
So - jetzt funktionierts wie ich es möchte:
Hier für andere Suchende:
Code:
<h:commandButton value="Neue Kat" immediate="false" action="#{categoryController.createRootCategory(param['newRootForm:newRootC'])}">

So muss man den Wert nicht in die BackingBean mappen und kann ihn direkt als Parameter übergeben.

Die param Geschichte + ManagedBean(name = ...) ist entscheidend.

Danke für die Hilfe!
 
Hallo,

das ist doch gerade der Vorteil von JSF. Du kannst auch statt eines value-Binding ein Komponenten-Binding machen. Dann hast vollen Zugriif in der Bean auf das Textfeld. Kann es aus der Bean einfärben, disablen usw....
Was macht du bei 10 Inputdfeldern ? 10 Parameter****

Denk mal drüber nach..

Gruß
Navino
 
Nun - wenn ich alle 10 Felder benötige, dann binde ich sie an die BackingBean - wenn ich nur 1 Parameter brauche, dann ist es eleganter als Parameter.
 
Ok... über eleganter läßt sich sicherlich streiten... aber in diesem Fall sicherlich nicht ;-)
Hauptsache du hast für dich eine zufriedenstellende Lösung!
Gruß
Navino
 
Zurück