Sto provando a passare una variabile java da un tag jsp personalizzato (Im utilizzando struts2 qui per ottenere la variabile dalla classe java). Ecco l'errore che sto ottenendo.Passaggio di un valore di oggetto Java nel tag JSP personalizzato
javax.servlet.ServletException: /pages/editBidForm.jsp(51,8) According to TLD or attribute directive in tag file, attribute parentId does not accept any expressions
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
....
Qui è la mia pagina JSP (parte)
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib uri="/WEB-INF/taglib.tld" prefix="custom" %>
...
...
<table>
<tr>
<%
String bidformoid=null;
bidFormOid=request.getParameter("bidFormOid");
%>
<td> <custom:zorancustomtag parentType = "BIDFORM" parentId = "<%= pageContext.getAttribute("bidFormOid") %>" /></td>
</tr>
</table>
io non sono in grado di trasmettere correttamente il parametro parentId. Sono stato in grado di passare correttamente il parametro parentType poiché implicava solo il passaggio della stringa
Ecco il file taglib.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag
Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>custom</shortname>
<tag>
<name>zorancustomtag</name>
<tagclass>com.zoran.action.CustomizedTag</tagclass>
<bodycontent>JSP</bodycontent>
<info>Tag having a body and attributes</info>
<attribute>
<name>name</name>
<required>false</required>
<rtexpvalue>false</rtexpvalue>
</attribute>
<attribute>
<name>parentType</name>
<required>true</required>
<rtexpvalue>true</rtexpvalue>
</attribute>
<attribute>
<name>parentId</name>
<required>true</required>
<rtexpvalue>false</rtexpvalue>
</attribute>
</tag>
</taglib>
E la classe java del tag personalizzato.
public class CustomizedTag implements Tag {
private PageContext pageContext;
private Tag parent;
private String name;
private int parentId;
private String parentType;
List list = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/* public CustomizedTag() {
super();
}
*/
public int doStartTag() throws JspException {
Session session = SessionUtil.getSession();
session.beginTransaction();
try {
JspWriter out = pageContext.getOut();
String parId = getParentId()+"";
// out.println(getParent()+" ");
String quer = "from ContentBase cb where cb.parentType=? AND cb.parentId=? ";//+parId;
Query query = session.createQuery(quer);
query.setParameter(0, getParentType());
query.setParameter(1, getParentId());
list = query.list();
ContentBase cb = new ContentBase();
if (null != list && !list.isEmpty()) {
cb = (ContentBase) list.get(0);
}
// pageContext.getOut().print("Sri "+getName());
out.println(cb.getDescription());
} catch (IOException ioe) {
throw new JspException("Error:"+ioe.getMessage());
}
return SKIP_BODY;
}
public int doEndTag() throws JspException {
return SKIP_PAGE;
}
public void release() {
}
public void setPageContext(PageContext pageContext) {
this.pageContext = pageContext;
}
public void setParent(Tag parent) {
this.parent = parent;
}
public Tag getParent() {
return parent;
}
public int getParentId() {
return parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
public String getParentType() {
return parentType;
}
public void setParentType(String parentType) {
this.parentType = parentType;
}
}
Qualcuno può comunicarmi come passare una variabile java tramite tag jsp personalizzato.
Grazie, Aditya
Grazie per la risposta, ma anche dopo aver impostato l'attributo di 'vero' sto ottenendo lo stesso messaggio di errore. Il tag jsp personalizzato con l'attributo è corretto? –
C'era un errore di battitura (presente anche nel post di OP), dovrebbe essere 'rtexprvalue' invece di' rtexpvalue'. Ho aggiornato la risposta. – BalusC
Questo era esattamente il mio problema - grazie mille! –