Я вернулся с еще одной сложной вещью.На этот раз я не знаю, прав ли я.
Я должен вернуть данные из базы данных как объект json.В этом объекте json я возвращаю некоторые значения, которые являются внешним ключом с другими таблицами в базе данных.Я правильно получил значения из базы данных, и теперь я хочу перебрать значения ключей forien из моего успеха ajax, используя тег iterate struts.Можно выполнить итерацию, если мы можем выполнить итерацию значений json для объекта. Кто-нибудь, пожалуйста, поделитесь идеей, если я прав.
<s:iterator value="listdoctorProducts" status="st" >
<div class="productListing">
<h3><span><s:property value="inventory.name" /></span> - <s:property value="inventory.description" /> </h3>
<div class="productDtlLeft">
<s:iterator value="inventory.pronovaInventories" >
<img src="images/pronova/products/<s:property value="image" />" width="31" height="94" alt="" />
</s:iterator>
</div>
<s:iterator value="inventory.productRatings" status="st">
<s:if test="(#st.index+1)==1">
<s:set var="no2" value="rating" />
</s:if>
<s:else>
<s:set var="no2" value="#no2+rating" />
</s:else>
<s:set var="count" value="#st.index+1" />
</s:iterator>
<s:set var="aver" value="%{#no2*10/#count}"/>
<s:set var="result" value="#aver*1.0/10"/>
<div class="productDtlRight">
<div class="ratting">
<div class="rattingStar">bg</div>
<div class="rattingOrange" style="width:<s:property value="(#result/5)*100"/>%;">bg</div>
</div>
<span>(<s:property value="#aver*1.0/10"/>)</span>
<div class="clear"></div>
<s:set var="no2" value="0" />
<s:bean name="com.zoondia.common.calculationBean" var="decCalBeansuggestedPrice">
<s:param name="valueOne" value="retailPrice"/>
<s:param name="decimalPlace">#.##</s:param>
</s:bean>
<h4>$<s:property value="#decCalBeansuggestedPrice.decimalPointConversionResult" /></h4>
<a class="addtoCart" href="javaScript:void(0)">View All</a>
</div>
<div class="clear"></div>
</div>
</s:iterator>
На этой странице jsp вы можете видеть, что у меня есть список объектов базы данных в listdoctorProducts
и я могу получить значения таблицы productRating, обратившись к этому, как этот
<s:iterator value="inventory.productRatings" status="st">
<s:if test="(#st.index+1)==1">
<s:set var="no2" value="rating" />
</s:if>
, и этот код, который у меня есть здесь, предназначен для первой страницы, и если пользователь нажимает для второй страницы, я должен перечислить вторую страницудля пользователя, и мы должны сделать это в ajax, заполнив значения JSON.Моя проблема в том, как мне написать такой итератор, как этот, если я получаю ответ как ajax?
Вот мой класс действий
public String getEcommerceWidgetFourJson(){
try{
Doctor DtObj = null;
Map sessionSingleDoctor = ActionContext.getContext().getSession();
Object Obj = null;
Obj = sessionSingleDoctor.get("Doctor");
DtObj = (Doctor) Obj;
int totalCount = DoctorDao.getInstance().totalNumberOfdoctorToProductsForJson(DtObj.getId());
numberOfRowsPerPage = Integer.parseInt(getText("ecommerce.widget.product.list.four"));
totalNumberOfRows = (int)Math.ceil((float)totalCount/numberOfRowsPerPage);
if(pageNum < 1){
pageNum = 1;
}else if(pageNum > lastRows){
pageNum = lastRows;
}
listdoctorProducts = DoctorDao.getInstance().getDoctorProductsAsJson(DtObj.getId(),numberOfRowsPerPage,pageNum);
}catch(Exception e){
e.printStackTrace();
}
return SUCCESS;
}
Я не добавил объявление переменной, а также методы установки и полученияВот.А вот моя функция Dao, откуда я получаю доступ к данным из базы данных
public List<DoctorToProducts> getDoctorProductsAsJson(int DocId,int numberOfRowsPerPage, int pageNum){
List<DoctorToProducts> dp = null;
DoctorToProducts ldp = null;
SessionFactory sessionFactory =
(SessionFactory) ServletActionContext.getServletContext().getAttribute(HibernateListener.KEY_NAME);
Session Hibernatesession = sessionFactory.openSession();
Hibernatesession.beginTransaction();
Query q = (Query) Hibernatesession.createQuery("select id,inventory.id,doctor.id,inventory.pronovaInventories,retailPrice,unitCreditValue from DoctorToProducts where doctor.id="+DocId);
q.setFirstResult((pageNum-1)*numberOfRowsPerPage);
q.setMaxResults(numberOfRowsPerPage);
dp = q.list();
Hibernatesession.getTransaction().commit();
Hibernatesession.flush();
return dp;
}
, а мой struts.xml -
<action name="frPdtListPagination" class="com.zoondia.action.DoctorPdtsPagination" method="getEcommerceWidgetFourJson">
<result type="json">
</result>
</action>
Просто добавьте действие только для этого вызова json.