webentwicklung-frage-antwort-db.com.de

Übergeben Sie den eingegebenen Textwert an die Bean-Methode, ohne den eingegebenen Wert an die Bean-Eigenschaft zu binden

Kann ich einen Eingabetextfeldwert an eine Bean-Methode übergeben, ohne den Wert an eine Bean-Eigenschaft zu binden?

<h:inputText value="#{myBean.myProperty}" />
<h:commandButton value="Test" action="#{myBean.execute()} />

Kann ich dies tun, ohne vorübergehend in #{myBean.myProperty} Zu speichern?

37
membersound

Binden Sie die Komponente als UIInput an die Ansicht und übergeben Sie mit UIInput#getValue() ihren Wert als Methodenargument.

<h:inputText binding="#{input1}" />
<h:commandButton value="Test" action="#{myBean.execute(input1.value)}" />

mit

public void execute(String value) {
    // ...
}

Beachten Sie, dass der Wert auf diese Weise bereits wie gewohnt in JSF konvertiert und validiert wurde.

Siehe auch:

51
BalusC

Sie können die Parameter des Formulars wiederherstellen, indem Sie die Anforderung abrufen und plain Java EE ServletRequest # getParameter verwenden. Denken Sie bei dieser Methode daran, die ID und den Namen festzulegen Ihrer Komponenten:

<h:form id="myForm">
    <h:inputText id="txtProperty" /> <!-- no binding here -->
    <input type="text" id="txtAnotherProperty" name="txtAnotherProperty" />
    <h:commandButton value="Test" action="#{myBean.execute()} /> 
</h:form>

Managed Bean:

@ManagedBean
@RequestScoped
public class MyBean {
    public void execute() {
        HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String txtProperty = request.getParameter("myForm:txtProperty");
        //note the difference when getting the parameter
        String txtAnotherProperty= request.getParameter("txtAnotherProperty");
        //use the value in txtProperty as you want...
        //Note: don't use System.out.println in production, use a logger instead
        System.out.println(txtProperty);
        System.out.println(txtAnotherProperty);
    }
}

Ein weiterer Thread mit mehr Infos:

15
Luiggi Mendoza