首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visualforce中继器

Visualforce中继器
EN

Stack Overflow用户
提问于 2012-03-07 05:13:34
回答 2查看 10.1K关注 0票数 3

嗨,我对visualforce中继器控件感到头疼:

代码语言:javascript
复制
 <apex:repeat value="{!productDetails}" var="o">
     <apex:pageBlockSectionItem >
         <apex:outputText style="label" value="Name:"></apex:outputText>
         <apex:outputLabel value="{!o.name}" /> 
     </apex:pageBlockSectionItem>

     <apex:pageBlockSectionItem >
         <apex:outputText value="{!o.ProductCode}"/>   
         <apex:outputText value="{!o.Family}" />  
     </apex:pageblockSection> 

     <apex:pageBlockSection> 
         <apex:outputText style="label" value="Quantity:"> </apex:outputText>
         <apex:inputText value="{!theList}"/>
     </apex:pageblockSection> 
 </apex:repeat>

我正在尝试做的是,为产品详细信息列表中的每个记录生成一个文本框。此文本框绑定到另一个字段(theList.quantity)。但我发现,当我更改最后一个文本框中的值时,它会设置所有文本框中的数量(很明显,因为它们绑定到相同的字段)。

所以我的问题是,在中继器中生成的每个文本框都有自己的参数值,最好的方法是什么?

还是我用错了中继器?

编辑(澄清):

对于每个产品详细信息记录(我正在迭代的内容),我希望有一个文本框,用户可以在其中输入产品数量。此文本框的值与产品详细信息记录无关。

我的问题是,如何为textbox的每次迭代生成唯一的参数?希望这是有意义的。

干杯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-07 06:41:27

要做到这一点,最简单的方法是向正在重复的对象添加自定义字段。然而,我知道有些情况下这是不可取的。

为此,您可以使用自定义的Apex对象(而不是自定义的Salesforce对象)。您可以通过在您的Controller或扩展中添加嵌套类来完成此操作。

例如:

代码语言:javascript
复制
public class MyClass 
{
    public class MyProductDetail
    {
        public string Name {get;set;}
        public string Family {get;set;}
        public string ProductCode {get;set;}
        public integer Quantity {get;set;} // theList
    }

    public List<MyProductDetail> MyProductDetails {get;set;}
}

您需要遍历所有的Product detail记录(从SOQL返回),并将它们添加到MyProductDetails列表。不过,一旦有了它们,您就可以使用Visualforce Repeater来显示它们中的每一个,并保存每个记录的输入数量数据。

代码语言:javascript
复制
<apex:repeat value="{!MyProductDetails}" var="o">
    <apex:pageBlockSectionItem >
        <apex:outputText style="label" value="Name:"></apex:outputText>
        <apex:outputLabel value="{!o.Name}" /> 
    </apex:pageBlockSectionItem>

    <apex:pageBlockSectionItem >
        <apex:outputText value="{!o.ProductCode}"/>   
        <apex:outputText value="{!o.Family}" />  
    </apex:pageblockSection> 

    <apex:pageBlockSection> 
        <apex:outputText style="label" value="Quantity:"> </apex:outputText>
        <apex:inputText value="{!o.Quantity}"/>
    </apex:pageblockSection> 
</apex:repeat>

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2012-03-07 05:18:34

您需要在<apex:repeat>中为productDetails列表中的每个元素使用var。例如:

代码语言:javascript
复制
<apex:repeat value="{!productDetails}" var="productDetail">
    <apex:pageBlockSection> 
        <apex:outputText style="label" value="Quantity:"> </apex:outputText>
        <apex:inputText value="{!productDetail.quantity}"/>
    </apex:pageblockSection> 
</apex:repeat>

这将设置每个productDetailquantity属性。

如果你在这个例子中真的迭代了productDetail的父对象,那么你需要修改你的控制器来为每个对象创建一个父对象,然后再迭代它。我将编写示例代码,就好像您正在迭代一个潜在订单列表。

在您的控制器中,您需要为每个产品创建一个订单。我不确定父类是SObject还是一个定制类,但我会把这个例子写得好像它是一个定制类一样。

代码语言:javascript
复制
public class Order {
    public Order(ProductDetail productDetail) {
        this.productDetail = productDetail;
    }

    public ProductDetail productDetail;
    public Integer quantity;
}

// I assume you've already implemented this getter or are setting it some other way.
public ProductDetail[] productDetails {
    get {
        if (productDetails == null) {
            productDetails = ...;
        }
        return productDetails;
    }
    set;
}

public Order[] orders {
    get {
        if (orders == null) {
            orders = new Order[]{};
            for (ProductDetail productDetail: productDetails) {
                orders.add(new Order(productDetail);
            }
        }
        return orders;
    }
    set;
}

现在,在您的VisualForce页面中,您可以遍历Order列表并让用户设置数量。

代码语言:javascript
复制
<apex:repeat value="{!orders}" var="order">
    ...
    <apex:outputtext style="label" value="Name:"></apex:outputText>
    <apex:outputLabel value="{!order.productDetail.name}" /> 
    ...
    <apex:inputText value="{!order.quantity}"/>
    ....
</apex:repeat>

回到您的控制器中,只保存quantity大于零的orders (或您脑海中的任何其他标准)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9592009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档