webshop을 개발 중이며 backing bean의 JSF 구성 요소에서 입력 값을 가져 오는 데 문제가 있습니다. 데이터베이스 테이블에서 레코드를 동적으로로드하는 데이터 테이블이 있습니다. 사용자가 구매하려는 항목의 양을 선택하고 단추를 클릭하여 쇼핑 카트에 추가 할 수있게하려고합니다. 나는 dropdownbox를 사용하여 사용자가 값을 선택할 수있게하지만 어떤 값이 선택 되더라도 내 backing bean에서 얻는 값은 항상 1입니다. 도움이 될 것입니다. 여기 backing bean에서 JSF 구성 요소 값을 검색 할 수 없습니다.
는 JSF 페이지<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="/WEB-INF/templates/basictemplate.xhtml">
<ui:define name="content">
<h:form id="form">
<p:dataTable var="necklace" value="#{necklaceBean.necklaces}" paginator="true" rows="10" id="necklaceTable" binding="#{necklaceBean.dataTableNecklaces }"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}">
<f:facet name="header">
Kettingen
</f:facet>
<p:column headerText="Foto" id="picture">
<p:lightBox styleClass="imagebox">
<h:outputLink value="#{necklace.picture }" title="#{necklace.productId }">
<h:graphicImage url="#{necklace.picture }" width="175" height="116"/>
</h:outputLink>
</p:lightBox>
</p:column>
<p:column headerText="Omschrijving" id="description">
<p>
#{necklace.description}
</p>
<p>
Prijs: #{necklace.price} Euro
</p>
<p>
<p:selectOneMenu value="#{necklaceBean.amount}">
<f:selectItem itemLabel="1" itemValue="1" />
<f:selectItem itemLabel="2" itemValue="2" />
<f:selectItem itemLabel="3" itemValue="3" />
<f:selectItem itemLabel="4" itemValue="4" />
<f:selectItem itemLabel="5" itemValue="5" />
<f:selectItem itemLabel="6" itemValue="6" />
<f:selectItem itemLabel="7" itemValue="7" />
<f:selectItem itemLabel="8" itemValue="8" />
<f:selectItem itemLabel="9" itemValue="9" />
<f:selectItem itemLabel="10" itemValue="10" />
</p:selectOneMenu>
X
<p:commandButton value="Toevoegen aan winkelwagentje" action="#{necklaceBean.addNecklaceToShoppingCart}"
disabled="#{necklace.soldOut}" ajax="false" />
</p>
</p:column>
</p:dataTable>
</h:form>
</ui:define>
</ui:composition>
</html>
을위한 코드입니다 그리고 여기에 백업 빈의 :
import java.util.List;
import org.primefaces.component.datatable.DataTable;
import be.petitefolie.site.controller.controllerobjects.Product;
import be.petitefolie.site.controller.controllerobjects.ProductType;
public class NecklaceBean extends ProductBean {
private List<Product> necklaces;
private int amount;
private DataTable dataTableNecklaces;
public NecklaceBean(){
necklaces = super.listProductsByPoductType(ProductType.NECKLACE);
}
public List<Product> getNecklaces() {
return necklaces;
}
public void setNecklaces(List<Product> necklaces) {
this.necklaces = necklaces;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public DataTable getDataTableNecklaces() {
return dataTableNecklaces;
}
public void setDataTableNecklaces(DataTable dataTableNecklaces) {
this.dataTableNecklaces = dataTableNecklaces;
}
public String addNecklaceToShoppingCart(){
super.addProductToShoppingCart((Product)this.dataTableNecklaces.getRowData(), amount);
return null;
}
}
답장을 보내 주셔서 감사합니다. 이 작업 방식은 실제로 예상되는 동작을 제공합니다. 그러나 이전에이 webshop (JSF 1.2를 사용)의 이전 버전에서이 방식으로 작업했기 때문에 약간 혼란 스럽습니다. 문제없이 작동했습니다. 지금 JSF 2.1 facelets을 사용하고 있으며 문제가 지금 막 나타난 것처럼 보입니다. 이것이 JSF 2의 새로운 작업 방식과 관련이 있을까요? – Wouter
@Wouter 저는 작업 버전에서 뭔가 다른 것이 틀림 없다고 생각합니다. 예를 들어 아약스를 사용하여 단일 행에서 구성 요소 만 전송하는 경우이 방법이 효과가 있었을 것입니다. 코드 없이는 말하기 어렵습니다. – dratewka