将ArrayList从Struts1.3操作传递到适当的JSP

时间:2018-01-17 16:13:48

标签: jsp jstl struts1

我将Struts V1.3用于项目。 这是我的Action类,我想通过execute函数中的request.settAttribute发送一个arrayList。

公共类ProductAction扩展Action {     private List productList;

 fieldEditColumn.setCellValueFactory(cellData -> cellData.getValue().editToolProperty());
 fieldEditColumn.setCellFactory(p -> new ColumnEditCell(......));
 fieldDeleteColumn.setCellFactory(p -> new ColumnDeleteCell(.....));
 fieldDeleteColumn.setCellValueFactory(cellData -> cellData.getValue().deleteProperty());

public class ColumnEditCell extends TableCell<ModelFieldTableEntry, Boolean> {

    private Button cellButton;

    public ColumnEditCell(....) {
        .....
        initializeHandleEvent();
    }

    private void initializeHandleEvent() {
        cellButton = new Button();
        cellButton.setGraphic(IconUtils.createIcon(FontAwesomeIcon.EDIT));

        cellButton.setOnAction(t -> {
            .....
        });
    }

    @Override
    protected void updateItem(final Boolean t, final boolean empty) {
        super.updateItem(t, empty);
        if (!empty) {
            setItem(t);
            setGraphic(cellButton);
        }
    }
}

如您所见,我想发送一个产品的ArrayList,其中Product是POJO。

这是我希望从Action类获得“$ {products}”的JSP代码。

@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
            Product product1 = new Product();
            product1.setProductName("productName1");
            product1.setProductCategory("productCategory1");
            product1.setProductPrice(15.33);
            product1.setProductDescription("productDescription1");

            Product product2 = new Product();
            product2.setProductName("productName2");
            product2.setProductCategory("productCategory2");
            product2.setProductPrice(15.454543);
            product2.setProductDescription("productDescription2");

            productList = new ArrayList<Product>();

            productList.add(product1);
            productList.add(product2);
            request.setAttribute("products", productList);
            return mapping.findForward("success");
}

我的问题是,在forEach我没有收到任何东西(甚至tr也不会出现)。 我怎样才能确保在JSP中获取ArrayList in action?

这是我的动作映射

                    <c:forEach items="${products}" var="product">
                        <tr>
                            <td>${product.productName}</td>
                            <td>${product.productCategory}</td>
                            <td>${product.productDescription}</td>
                            <td>${product.productPrice}</td>
                        </tr>
                    </c:forEach>

1 个答案:

答案 0 :(得分:1)

从转发配置中删除属性redirect="true",它会丢失jsp重定向所需的属性。

如果没有动作课,你怎么能保证它?对jsp有意义吗?这些值由EL表达式计算并由Jstl标记呈现,因此您必须确保它们可以在jsp的范围内访问。转发到jsp会将变量保存到请求范围,然后您可以在每个标记中读取它们。