Search code examples
salesforceapex-codevisualforceapexforce.com

Trying to capture Apex:InputText within Apex repeat


I am trying construct a dynamic table.

Most of the data is Outputtext and I am able to print that. I am facing difficulty in reading user input values. There are two rows in the below table that require input from users. I am able to generate table with two rows that can accept input from users, but unable to pass those value to Controller in order to perform operations once I get the data from users.

Can anyone help me suggesting the best value to pass values from Apex:Inputtext within Apex:repeat to controller?

Any suggestion would be a great help.

<apex:repeat value="{!tList}" var="tvar" id="t4">
    <tr id="slxtableData">
        <td>{!tvar.ftypename}</td>
        <td><apex:outputText value="{0, number, 00.00}"
                rendered="{!NOT(tvar.editable)}"><apex:param value="{!tvar.a}"/></apex:outputText>
            <apex:inputText id="ipVar1" value="{!tvar.a}" style="text-align: right;"
                rendered="{!tvar.editable}" label="{!tvar.a}"/></td>
        <td><apex:outputPanel layout="NONE"
                rendered="{!NOT(tvar.editable)}">{!tvar.b}</apex:outputPanel>
            <apex:inputText id="ipVar2" value="{!tvar.b}" style="text-align: right;" 
                rendered="{!tvar.editable}" label="{!tvar.b}"/></td>
        <td><apex:outputPanel layout="NONE"
                rendered="{!NOT(tvar.editable)}">{!tvar.c}</apex:outputPanel>
            <apex:inputText id="ipVar3" value="{!tvar.c}" style="text-align: right;"
                rendered="{!tvar.editable}" label="{!tvar.c}"/></td>
        <td><apex:outputPanel layout="NONE"
                rendered="{!NOT(tvar.editable)}">{!tvar.d}</apex:outputPanel>
            <apex:inputText id="ipVar4" value="{!tvar.d}" style="text-align: right;"
                rendered="{!tvar.editable}" label="{!tvar.d}"/></td>
    </tr>
</apex:repeat>

Solution

  • You need to put a <apex:form> around the <apex:repeat>.

    Your code then would look like this:

    <apex:form>
    <apex:repeat value="{!tList}" var="tvar" id="t4">
        <tr id="slxtableData">
            <td>{!tvar.ftypename}</td>
            <td><apex:outputText value="{0, number, 00.00}"
                    rendered="{!NOT(tvar.editable)}"><apex:param value="{!tvar.a}"/></apex:outputText>
                <apex:inputText id="ipVar1" value="{!tvar.a}" style="text-align: right;"
                    rendered="{!tvar.editable}" label="{!tvar.a}"/></td>
            <td><apex:outputPanel layout="NONE"
                    rendered="{!NOT(tvar.editable)}">{!tvar.b}</apex:outputPanel>
                <apex:inputText id="ipVar2" value="{!tvar.b}" style="text-align: right;" 
                    rendered="{!tvar.editable}" label="{!tvar.b}"/></td>
            <td><apex:outputPanel layout="NONE"
                    rendered="{!NOT(tvar.editable)}">{!tvar.c}</apex:outputPanel>
                <apex:inputText id="ipVar3" value="{!tvar.c}" style="text-align: right;"
                    rendered="{!tvar.editable}" label="{!tvar.c}"/></td>
            <td><apex:outputPanel layout="NONE"
                    rendered="{!NOT(tvar.editable)}">{!tvar.d}</apex:outputPanel>
                <apex:inputText id="ipVar4" value="{!tvar.d}" style="text-align: right;"
                    rendered="{!tvar.editable}" label="{!tvar.d}"/></td>
        </tr>
    </apex:repeat>
    </apex:form>