Hi Horatiu,
Sorry, I'm not too familiar with the repeaterBlock tag of the
rpb.jarwritten in the dev2dev article you mentioned. From a link the
link you had,
you can navigate to another article to download the source. Maybe you can
modify it to resolve an y issues supporting the JSP 2.0 EL. I don't think
there's any XScript expression language support in the Apache Beehive NetUI.
Kind regards,
Carlin
On 8/25/06, Stanciu, Horatiu (TOR) <[EMAIL PROTECTED]> wrote:
I forgot to add that I first tried
<netui-data:repeater dataSource="pageFlow.packs">
<netui-data:repeater dataSource="{pageFlow.packs}">
<netui-data:repeater dataSource="${pageFlow.packs}">
and that PackageVO looks like
////////////////////////////////////////////////////////////////////////
////
package pageflow.thbm.packages.ajax;
public class PackageVO {
private String pkgCode;
private String pkgNameEn;
private String pkgNameFr;
private String pkgDescriptionEn;
private String pkgDescriptionFr;
private String pkgStatus;
public String getPkgCode() {
return pkgCode;
}
public void setPkgCode(String pkgCode) {
this.pkgCode = pkgCode;
}
public String getPkgDescriptionEn() {
return pkgDescriptionEn;
}
public void setPkgDescriptionEn(String pkgDescriptionEn) {
this.pkgDescriptionEn = pkgDescriptionEn;
}
public String getPkgDescriptionFr() {
return pkgDescriptionFr;
}
public void setPkgDescriptionFr(String pkgDescriptionFr) {
this.pkgDescriptionFr = pkgDescriptionFr;
}
public String getPkgNameEn() {
return pkgNameEn;
}
public void setPkgNameEn(String pkgNameEn) {
this.pkgNameEn = pkgNameEn;
}
public String getPkgNameFr() {
return pkgNameFr;
}
public void setPkgNameFr(String pkgNameFr) {
this.pkgNameFr = pkgNameFr;
}
public String getPkgStatus() {
return pkgStatus;
}
public void setPkgStatus(String pkgStatus) {
this.pkgStatus = pkgStatus;
}
}
Thanks,
Horatiu
-----Original Message-----
From: Stanciu, Horatiu (TOR)
Sent: Friday, August 25, 2006 9:37 AM
To: [email protected]
Subject: RPB repeaterBlock tag (WLP8.1) with WLP9.2 - "Expressions in a
dataSource must bind to a single property."
Hi !
I need to use the repeaterBlock (the taglib included in rpb.jar that was
written for 8.1) in 9.2. (details of 8.1 usage are at
http://dev2dev.bea.com/lpt/a/38 ).
When I'm running my below implementation I receive the following error
message:
The expression "pageContext.packs" is an invalid expression for a
dataSource. Expressions in a dataSource must bind to a single property.
although what I did is the same with the example I found. I had to
import in WEB-INF\lib rpb.jar and netui-scoping.jar (these are 8.1
libraries).
I'm wondering if this taglib that used xscript (
dataSource="{pageContext.packs}" ) under 8.1 is able to cope with the
new
9.2 style (without curly braces).
I'm using the following code:
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
Index.jsp - the jsp where the results are displayed
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ page import="com.bea.ps.repeater.RepeaterFilter"%>
<%@ page import="org.apache.beehive.netui.pageflow.PageFlowUtils"%>
<%@ page import="pageflow.thbm.packages.modify.ModifyController"%>
<%@ taglib uri="netui-tags-databinding.tld" prefix="netui-data"%>
<%@ taglib uri="netui-tags-html.tld" prefix="netui"%>
<%@ taglib uri="netui-tags-template.tld" prefix="netui-template"%>
<%@ taglib uri="rpb" prefix="rpb"%>
<netui:html>
<head>
<title>
Contacts
</title>
</head>
<body>
<%
ModifyController controller =
(ModifyController)PageFlowUtils.getCurrentPageFlow(request,request.getSe
ssion().getServletContext());
RepeaterFilter filter = controller.getRepeaterFilter();
filter.setRowCount(10);
%>
<netui:form action="refresh">
<rpb:repeaterBlock name="packages1" filter="<%=filter%>"
ascendingImage='<%=request.getContextPath()+"/images/down-arrow.gif"%>'
descendingImage='<%=request.getContextPath()+"/images/up-arrow.gif"%>'>
<netui-data:repeater dataSource="pageContext.packs">
<netui-data:repeaterHeader>
<table class="tablebody" border="1">
<tr>
<th><rpb:columnHeader
field="pkgDescriptionEn">Description En</rpb:columnHeader></th>
<th><rpb:columnHeader
field="pkgDescriptionFr">Description Fr</rpb:columnHeader></th>
<th><rpb:columnHeader field="pkgNameEn">Home
Phone</rpb:columnHeader></th>
<th><rpb:columnHeader field="pkgNameFr">Work
Phone</rpb:columnHeader></th>
<th><rpb:columnHeader field="pkgStatus">Mobile
Phone</rpb:columnHeader></th>
</tr>
</netui-data:repeaterHeader>
<netui-data:repeaterItem>
<tr>
<td><netui:label
value="container.item.pkgDescriptionEn"/></td>
<td><netui:label
value="container.item.pkgDescriptionFr"/></td>
<td><netui:label
value="container.item.pkgNameEn"/></td>
<td><netui:label
value="container.item.pkgNameFr"/></td>
<td><netui:label
value="container.item.pkgStatus"/></td>
</tr>
</netui-data:repeaterItem>
<netui-data:repeaterFooter></table></netui-data:repeaterFooter>
</netui-data:repeater>
<br>
<rpb:firstPage label="First"/>
<rpb:previousPage label="Previous"/>
<rpb:nextPage label="Next"/>
<rpb:lastPage label="Last"/>
<rpb:pageNumber/>
</rpb:repeaterBlock>
</netui:form>
</body>
</netui:html>
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
ModifyController.jpf is like this:
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
package pageflow.thbm.packages.modify;
import javax.servlet.http.HttpSession;
import org.apache.beehive.netui.pageflow.PageFlowController;
import org.apache.beehive.netui.pageflow.annotations.Jpf;
import com.bea.ps.repeater.RepeaterFilter;
import pageflow.thbm.packages.ajax.*;
import org.apache.beehive.netui.pageflow.Forward;
@Jpf.Controller(simpleActions = { @Jpf.SimpleAction(name = "begin", path
= "index.jsp") })
public class ModifyController extends PageFlowController {
private RepeaterFilter filter;
private static final long serialVersionUID = -1876986115L;
private Packages packs = new Packages();
@Jpf.Action(forwards = { @Jpf.Forward(name = "success", path
= "index.jsp") })
public Forward refresh() {
Forward forward = new Forward("success");
return forward;
}
/**
* Callback that is invoked when this controller instance is
created.
*/
@Override
protected void onCreate() {
filter = new RepeaterFilter();
filter.setSortField("pkgCode");
filter.setPageSize(5);
}
/**
* Return the current filter
*/
public RepeaterFilter getRepeaterFilter()
{
return filter;
}
public PackageVO[] getPackages()
{
return packs.getPackages(filter);
}
/**
* Callback that is invoked when this controller instance is
destroyed.
*/
@Override
protected void onDestroy(HttpSession session) {
}
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
and Packages.java now:
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
package pageflow.thbm.packages.ajax;
import com.bea.ps.repeater.RepeaterFilter;
import java.util.Iterator;
import java.util.ArrayList;
import com.bea.ps.repeater.RepeaterHelper;
public class Packages implements java.io.Serializable {
public Packages(){}
public PackageVO[] getPackages(RepeaterFilter filter){
// I don't have yet link to the database, so I mimicked this:
ArrayList<PackageVO> packages = new
ArrayList<PackageVO>();
PackageVO pkg = new PackageVO();
pkg.setPkgCode("123");
pkg.setPkgDescriptionEn("Good Pkg");
pkg.setPkgDescriptionFr("[Bonne paquet]");
pkg.setPkgNameEn("Pkg1");
pkg.setPkgNameFr("[Pkg1]");
pkg.setPkgStatus("Inactive");
PackageVO pkg1 = new PackageVO();
pkg1.setPkgCode("123");
pkg1.setPkgDescriptionEn("Good Pkg");
pkg1.setPkgDescriptionFr("[Bonne paquet]");
pkg1.setPkgNameEn("Pkg1");
pkg1.setPkgNameFr("[Pkg1]");
pkg1.setPkgStatus("Inactive");
PackageVO pkg2 = new PackageVO();
pkg2.setPkgCode("123");
pkg2.setPkgDescriptionEn("Good Pkg");
pkg2.setPkgDescriptionFr("[Bonne paquet]");
pkg2.setPkgNameEn("Pkg1");
pkg2.setPkgNameFr("[Pkg1]");
pkg2.setPkgStatus("Inactive");
PackageVO pkg3 = new PackageVO();
pkg3.setPkgCode("123");
pkg3.setPkgDescriptionEn("Good Pkg");
pkg3.setPkgDescriptionFr("[Bonne paquet]");
pkg3.setPkgNameEn("Pkg1");
pkg3.setPkgNameFr("[Pkg1]");
pkg3.setPkgStatus("Inactive");
PackageVO pkg4 = new PackageVO();
pkg4.setPkgCode("123");
pkg4.setPkgDescriptionEn("Good Pkg");
pkg4.setPkgDescriptionFr("[Bonne paquet]");
pkg4.setPkgNameEn("pkg4");
pkg4.setPkgNameFr("[pkg4]");
pkg4.setPkgStatus("Inactive");
PackageVO pkg5 = new PackageVO();
pkg5.setPkgCode("123");
pkg5.setPkgDescriptionEn("Good Pkg");
pkg5.setPkgDescriptionFr("[Bonne paquet]");
pkg5.setPkgNameEn("pkg5");
pkg5.setPkgNameFr("[pkg5]");
pkg5.setPkgStatus("Inactive");
PackageVO pkg6 = new PackageVO();
pkg6.setPkgCode("123");
pkg6.setPkgDescriptionEn("Good Pkg");
pkg6.setPkgDescriptionFr("[Bonne paquet]");
pkg6.setPkgNameEn("pkg6");
pkg6.setPkgNameFr("[pkg6]");
pkg6.setPkgStatus("Inactive");
PackageVO pkg7 = new PackageVO();
pkg7.setPkgCode("123");
pkg7.setPkgDescriptionEn("Good Pkg");
pkg7.setPkgDescriptionFr("[Bonne paquet]");
pkg7.setPkgNameEn("pkg7");
pkg7.setPkgNameFr("[pkg7]");
pkg7.setPkgStatus("Inactive");
PackageVO pkg8 = new PackageVO();
pkg8.setPkgCode("123");
pkg8.setPkgDescriptionEn("Good Pkg");
pkg8.setPkgDescriptionFr("[Bonne paquet]");
pkg8.setPkgNameEn("pkg8");
pkg8.setPkgNameFr("[pkg8]");
pkg8.setPkgStatus("Inactive");
PackageVO pkg9 = new PackageVO();
pkg9.setPkgCode("123");
pkg9.setPkgDescriptionEn("Good Pkg");
pkg9.setPkgDescriptionFr("[Bonne paquet]");
pkg9.setPkgNameEn("pkg9");
pkg9.setPkgNameFr("[pkg9]");
pkg9.setPkgStatus("Inactive");
packages.add(pkg);
packages.add(pkg1);
packages.add(pkg2);
packages.add(pkg3);
packages.add(pkg4);
packages.add(pkg5);
packages.add(pkg6);
packages.add(pkg7);
packages.add(pkg8);
packages.add(pkg9);
//Remove this line if you do not need the last page action feature and
//want to avoid the extra hit to the database to count rows
filter.setRowCount(packages.size());
//Get data from database control
//Iterator it =
contactDB.getContacts(filter.getSortField(),filter.getSortDirection().ge
tName());
Iterator it = packages.iterator();
//Process data from Iterator returned by database control and
return it
return
(PackageVO[])RepeaterHelper.processIterator(it,PackageVO.class,filter);
}
}
******* Confidentiality Notice *******
ESI Canada -- Optimizing the value of drug and dental benefits
This email, its electronic document attachments, and the contents of its
website linkages may contain confidential health information. This
information is intended solely for use by the individual or entity to
whom it is addressed. If you have received this information in error,
please notify the sender immediately and arrange for the prompt
destruction of the material and any accompanying attachments.
******* Avis de confidentialite *******
ESI Canada -- Optimiser la valeur des regimes d'assurance medicaments et
dentaires
Ce courriel ainsi que tout document y etant joint de meme que le contenu
des liens vers des sites Web peuvent reunir des renseignements
confidentiels sur la sante. Cette information s'adresse uniquement a
l'usager ou a l'organisation auxquels elle est destinee. Si vous avez
recu ce message par erreur, veuillez en aviser l'expediteur
immediatement et proceder a la suppression du document et des fichiers
joints sans tarder.