File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes JSF and the fly likes Does action attribute not work with function call having parameters? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » JSF
Bookmark "Does action attribute not work with function call having parameters?" Watch "Does action attribute not work with function call having parameters?" New topic
Author

Does action attribute not work with function call having parameters?

sunny Bansal
Greenhorn

Joined: Sep 27, 2010
Posts: 3
I am using JSF with eclipse Helios version. I am trying one example present in Core JSF 3rd Edition,present on page No 227. In this example I am trying to delete rows whichever I select from GUI. But It throws error during deployment time 'Syntax Error in EL'

Error is thrwon at :- <h:commandLink value="Delete" action="#{tableData.deleteRow(name)}"/>

when i removed name parameter from above unction call along with brackets then I did not get any error but by doing so functionaly its nt working correctly

Does action not work with functioncall having parameter like name?



Below is the index.xhtml and bean classes.

index.xhtml:-

<?xml version="1.0" encoding="UTF-8"?>
<!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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<hutputStylesheet library="css" name="styles.css"/>
<title>#{msgs.windowTitle}</title>
</h:head>
<h:body>
<h:form>
<h:dataTable value="#{tableData.names}" var="name" styleClass="names"
headerClass="namesHeader" columnClasses="last,first">
<h:column>
<f:facet name="header">#{msgs.lastColumnHeader}</f:facet>
#{name.last},
</h:column>
<h:column>
<f:facet name="header">#{msgs.firstColumnHeader}</f:facet>
#{name.first}
</h:column>
<h:column>
<h:commandLink value="Delete" action="#{tableData.deleteRow(name)}"/>
</h:column>
</h:dataTable>
</h:form>
</h:body>
</html>


TableData.java

package com.corejsf;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;

//import javax.inject.Named;
import javax.faces.bean.ManagedBean;
//import javax.enterprise.context.SessionScoped;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class TableData implements Serializable {
private ArrayList<Name> names = new ArrayList<Name>(Arrays.asList(
new Name("Anna", "Keeney"),
new Name("John", "Wilson"),
new Name("Mariko", "Randor"),
new Name("William", "Dupont")
));

public ArrayList<Name> getNames() {
return names;
}

public String deleteRow(Name nameToDelete) {
names.remove(nameToDelete);
return null;
}
}


Name.java

package com.corejsf;

import java.io.Serializable;

public class Name implements Serializable {
private String first;
private String last;

public Name(String first, String last) {
this.first = first;
this.last = last;
}

public void setFirst(String newValue) { first = newValue; }
public String getFirst() { return first; }

public void setLast(String newValue) { last = newValue; }
public String getLast() { return last; }
}



Hany Shafik
Ranch Hand

Joined: Jun 21, 2008
Posts: 80
Of course it should work, however can you submit the full stack trace of your error, also use code tags for your code.
Tim Holloway
Saloon Keeper

Joined: Jun 25, 2001
Posts: 16068
    
  21

Welcome to the JavaRanch, Sunny!

JSF version 1 did not permit parameters on action methods.

In any event, you don't need to pass the row ID as a parameter. The action method can get that but invoking the "getCurrentRow()" method on the table's dataModel object.


Customer surveys are for companies who didn't pay proper attention to begin with.
sunny Bansal
Greenhorn

Joined: Sep 27, 2010
Posts: 3
Tim Holloway wrote:Welcome to the JavaRanch, Sunny!

JSF version 1 did not permit parameters on action methods.

In any event, you don't need to pass the row ID as a parameter. The action method can get that but invoking the "getCurrentRow()" method on the table's dataModel object.


I am using JSF 2.0 version and gettiong fellowing error on console:-


SEVERE: Servlet.service() for servlet Faces Servlet threw exception
org.apache.el.parser.ParseException: Encountered " "(" "( "" at line 1, column 22.
Was expecting one of:
"}" ...
"." ...
"[" ...
">" ...
"gt" ...
"<" ...
"lt" ...
">=" ...
"ge" ...
"<=" ...
"le" ...
"==" ...
"eq" ...
"!=" ...
"ne" ...
"&&" ...
"and" ...
"||" ...
"or" ...
"*" ...
"+" ...
"-" ...
"/" ...
"div" ...
"%" ...
"mod" ...

at org.apache.el.parser.ELParser.generateParseException(ELParser.java:2142)
at org.apache.el.parser.ELParser.jj_consume_token(ELParser.java:2024)
at org.apache.el.parser.ELParser.DeferredExpression(ELParser.java:113)
at org.apache.el.parser.ELParser.CompositeExpression(ELParser.java:40)
at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:93)
at org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:150)
at org.apache.el.lang.ExpressionBuilder.createMethodExpression(ExpressionBuilder.java:201)
at org.apache.el.ExpressionFactoryImpl.createMethodExpression(ExpressionFactoryImpl.java:57)
at com.sun.faces.facelets.tag.TagAttributeImpl.getMethodExpression(TagAttributeImpl.java:215)
at com.sun.faces.facelets.tag.jsf.ActionSourceRule$ActionMapper2.applyMetadata(ActionSourceRule.java:97)
at com.sun.faces.facelets.tag.MetadataImpl.applyMetadata(MetadataImpl.java:74)
at javax.faces.view.facelets.MetaTagHandler.setAttributes(MetaTagHandler.java:122)
at javax.faces.view.facelets.DelegatingMetaTagHandler.setAttributes(DelegatingMetaTagHandler.java:96)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:153)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:114)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:120)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:204)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:114)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:91)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:120)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:204)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:114)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:120)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:204)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:114)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:120)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:204)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:114)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:91)
at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:86)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:91)
at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:75)
at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:145)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:716)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)



sunny Bansal
Greenhorn

Joined: Sep 27, 2010
Posts: 3
Tim Holloway wrote:Welcome to the JavaRanch, Sunny!

JSF version 1 did not permit parameters on action methods.

In any event, you don't need to pass the row ID as a parameter. The action method can get that but invoking the "getCurrentRow()" method on the table's dataModel object.



where i need to mention the following property:-

use-el-libs=true
 
 
subject: Does action attribute not work with function call having parameters?