【问题标题】:loop through an attribute from a javabean循环遍历来自 javabean 的属性
【发布时间】:2012-12-18 02:12:58
【问题描述】:

我想在 JavaServer 页面的表格中打印我的所有产品,但我的 jstl 代码有问题。

我的模型产品:

public final class Product
{
    private int id;
    private String description;    
    private Double price;    
    private String categoryName;
...

我的 JavaBean 产品: (创建此 bean 时,它会填充我模型中的产品)

@ManagedBean(name = "productsBean")
@RequestScoped
public class Products implements Serializable {

    private List<Product> producten;
    @ManagedProperty(value = "#{applicationBean}")
    private ApplicationBean applicationBean;

    public Producten() {

        Store store = applicationBean.getStore();

    for (String c : store.getCategories()) {
        for(model.Product p : store.getProductsOfCategory(c)){
            beans.Product product = new Product();
            product.setId(p.getId());
            product.setDescription(p.getDescription());
            product.setCategoryName(p.getCategoryName());
            product.setPrice(p.getPrice());
        producten.add(product);
        }

    }                
    }

我的 JavaBean 产品:

@ManagedBean(name= "productBean")
@RequestScoped
public class Product implements Serializable{

    @ManagedProperty(value = "#{applicationBean}")
    private ApplicationBean applicationBean;

     private int product_id;
    private String description;    
    private Double price;    
    private String categoryName;

在我的 JavaServer 页面中,我想要类似的东西,但是:

            <c:forEach var="product" items="${productsBean.products}">
                <tr>
                    <td>${product.description}</td>
                </tr>
            </c:forEach>

【问题讨论】:

  • 你问过类似的问题here?
  • 是的,我正在拼命尝试完成这项工作。

标签: java jsf jsf-2 jstl javabeans


【解决方案1】:

您好,您是否导入了 jsf jsf core 和 html 的 TLD 文件

<f:view>
<h:form>
<h:dataTable value="#{productsBean.products}" var="product">
<h:column>#{product.description}</h:column>  
</h:dataTable>

试试这样 谢谢

【讨论】:

    【解决方案2】:

    如果作用域中尚不存在 JSF 托管 bean,则旧版 JSP 表达式 ${} 不会自动创建它们。您需要 JSF 表达式 #{} 代替。更重要的是,您应该停止在 JSF 页面中使用旧的 JSP 表达式 ${} 以避免将来的混乱和维护麻烦。 JSF 表达式#{} 的作用完全相同,甚至更多(即,自动创建 JSF 托管 bean 并通过输入组件设置模型值)。

    <table>
        <c:forEach var="product" items="#{productsBean.products}">
            <tr>
                <td>#{product.description}</td>
            </tr>
        </c:forEach>
    </table>
    

    另见:


    与具体问题无关,您是否考虑过使用&lt;h:dataTable&gt; 代替?它使您免于摆弄松散的 HTML &lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;td&gt; 标签。

    <h:dataTable value="#{productsBean.products}" var="product">
        <h:column>#{product.description}</h:column>
    </h:dataTable>
    

    另见:

    【讨论】:

    • 我现在使用 ,但我的网页字面上显示的是“#{product.description}”。我做错了什么?
    • 您可能需要检查 web.xml 中的 servlet 规范版本号。
    • 如果您使用 JSP 而不是 Facelets,或者如果您的类路径完全一团糟,或者如果 JSF 2 由于配置错误而以 JSF 1.x 后备模式运行,则可能会发生这种情况。您在学习 JSF2 时使用了哪些资源/教程/书籍?根据您之前提出的问题,我不认为这是一个理智的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    相关资源
    最近更新 更多