在 JSF 中获取列表 <object> 中的项目 ID

Getting id of item in list<object> in JSF

我不知道应该使用什么方法以及如何开始编码,以便在单击表单按钮时获取特定对象项的 id

显示的 产品 ID 值是我创建的 table 产品的 主键 。我来自 Swing 编程,在 Swing 中,我可以轻松使用 JLabel.getText(); 获取屏幕截图中显示的产品 ID 1,4,5,6。但我想这与 JSF.

不同

此外,这些对象值包含在 ui:repeat 循环中

frames.xhtml

<ui:repeat value="#{frameBean.all}" var="f" varStatus="loop">
            <h:outputText escape="false" rendered="#{loop.index % 3 == 0}" />
            <div >
                <div class="col-sm-6 col-md-3">
                    <div class="thumbnail clearfix">
                        <img src="..." alt="frame image placeholder" width="240" height="180"/>
                            <div class="caption">
                                <p>
                                    <h:outputLabel>Product ID: </h:outputLabel>
                                    <h:outputText value="#{f.product_id}"/>
                                </p>
                                <p><h:outputLabel value="#{f.name}"/></p>
                                <p><h:outputText value="#{f.description}"/></p>
                                <p>
                                    <h:panelGroup rendered="#{login.userRole eq 'customer' or login.userRole eq null}">
                                        <a href="#" class="btn btn-primary pull-right" role="button">Add To Cart</a> 
                                    </h:panelGroup>
                                </p>
                            </div>
                    </div>
                </div>
            </div>
            <h:outputText escape="false" rendered="#{loop.last or (loop.index + 1) % 3 == 0}" />
        </ui:repeat>

当然,我可以使用 f.product_Id,但是如果单击 添加到购物车 按钮,我如何才能获得特定的 ID?

这是包含 getAll() 帧方法的实现

public List<Frame> getAll() throws SQLException {
        List<Frame> list = new ArrayList<>();

        PreparedStatement ps = null;
        try {
            String SQL = "select product_id, name, description, price_per_sqft, material from product where isFrame = 1";
            ps = con.prepareStatement(SQL);

            //get customer data from database
            ResultSet result = ps.executeQuery();
            while (result.next()) {
                Frame frame = new Frame();

                frame.setProduct_id(result.getInt("product_id"));
                frame.setName(result.getString("name"));
                frame.setDescription(result.getString("description"));
                frame.setPrice_per_sqft(result.getDouble("price_per_sqft"));
                frame.setMaterial(result.getString("material"));

                //store all data into a List
                list.add(frame);
            }
        } catch (SQLException | HeadlessException e) {
            e.printStackTrace();

        } finally {
            try {
                con.close();
                ps.close();
            } catch (Exception e) {
                e.printStackTrace();

            }
        }

        return list;
    }

为了获取框架的产品 ID,我正在考虑创建一个 addToCart(int aProductId) 方法。它将需要 aProductId 个参数。

谢谢。

您可以使用 f:param 组件来存储产品 ID

<p>
    <h:outputLabel>Product ID: </h:outputLabel>
    <h:outputText value="#{f.product_id}"/>
    <f:param name="productId" value=""#{f.product_id}""></f:param>
</p>

稍后在 bean 中,您可以使用 FacesContext

获取值
String propertyId = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
                .get("productId");

您需要使用 ui:repeatvar 属性。在支持 bean addToCart(Frame f).

中编写一个方法
public void addToCart(Frame pFrameAdded){
    //Do your operations over the frame added. 
}

执行点击操作时,需要从您的 xhtml 调用此方法。 是这样的:- <a href="#{frameBean.addToCart(f)}" class="btn btn-primary pull-right" role="button">Add To Cart</a>

这里传递给方法的参数是ui:repeatvar属性,用于唯一标识传递给ui:repeat的元素列表中的每个元素。

希望这能解决您的问题。