Pregunta

Tengo un controlador APEX que construye una lista que se mostrará en una datos. La lista combina un objeto diferente, por lo que la variable que creo es una lista

Digamos que todos los objetos de esta lista tienen un campo "Externo__c". ¿Cómo le digo a Visualforce que haga este campo? Usar {! Obj.External__c} no funcionará ya que es un SOBject.

¿Fue útil?

Solución

Si tiene una lista de SOBjects, puede obtener un campo común usando obj.get('external__c') Aunque generalmente debe lanzar el resultado a un tipo para poder usarlo.

Puede crear una clase personalizada en código que puede completar con varios objetos:

// inside the controller do this:
public class COutputObject
{
    private SObject sObj = null;
    public  string  strField get {return (string)sObj.get('external__c'); }

    public COutputObject(SObject s)
    {
        sObj = s;
    }
}

// -- snip --

// then have a list of these which you'll loop over in the page
public list<COutputObject> liObjects = new list<COutputObject>();

// fill this with data
for(CustomObj__c sCustom : [select Id, external__c from CustomObj__c limit 200])
{
    liObjects.add(new COutputObject(sCustom));
    // etc.

for(CustomObj2__c sCustom : [select Id, external__c from CustomObj2__c limit 200])
{
    liObjects.add(new COutputObject(sCustom));
    // etc.

No es 100% seguro si mi sintaxis en el Getter es correcta, pero está cerca;) ¡Espero que esto lo ayude a lograr lo que buscas!

Otros consejos

Digamos que la propiedad de la lista se declara así en su controlador: Public List<Beer__c> ColdOnes { get; set; }. Bueno, en Visualforce, hace referencia a las cervezas por el nombre de su propiedad en el controlador ... {!ColdOnes}. Lo siguiente se toma principalmente de la Guía de Visualforce, pero la he adaptado para adaptarse a nuestro tema de tumba :)

<apex:dataTable value="{!ColdOnes}" var="co" id="theTable" rowClasses="odd,even" styleClass="tableClass">

    <apex:facet name="caption">table caption</apex:facet>

    <apex:facet name="header">table header</apex:facet>

    <apex:facet name="footer">table footer</apex:facet>

    <apex:column>

            <apex:facet name="header">Beer Name</apex:facet>

        <apex:facet name="footer">column footer</apex:facet>

        <apex:outputText value="{!co.name}"/>

    </apex:column>
    <apex:column>

            <apex:facet name="header">Alcohol Volume</apex:facet>

        <apex:facet name="footer">column footer</apex:facet>

        <apex:outputText value="{!co.alcohol_volume__c}"/>

    </apex:column>
</apex:dataTable>

Solo tenga en cuenta que si está configurando fríos con un valor consultado en su código, debe seleccionar los campos que tiene la intención de obtener en su Visualforce. Asi que:

ColdOnes=[select name, alcohol_volume__c from Beer__c where blahblahblah];

Bueno, me voy a una pinta. ¡Espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top