定义View Params之间有什么区别:
<f:metadata>
<f:viewParam name="id" value="#{someBean.id}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
并在ManagedBean中定义属性,如下所示:
@ManagedProperty(value = "#{param.id}")
private Integer id;
Run Code Online (Sandbox Code Playgroud) 我在页面上使用datatable并使用绑定属性将其绑定到我的支持bean.这是我的代码: -
<?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:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form prependId="false">
<h:dataTable var="item" value="#{testBean.stringCollection}" binding="#{testBean.dataTable}">
<h:column>
<h:outputText value="#{item}"/>
</h:column>
<h:column>
<h:commandButton value="Click" actionListener="#{testBean.action}"/>
</h:column>
</h:dataTable>
</h:form>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是我的豆子: -
package managedBeans;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.html.HtmlDataTable;
@ManagedBean(name="testBean")
@ViewScoped
public class testBean implements Serializable {
private List<String> stringCollection;
public List<String> getStringCollection() {
return stringCollection;
}
public void …Run Code Online (Sandbox Code Playgroud) 我如何在JSF 2.0中使用EL中的参数/变量/参数调用直接方法或方法?
例如,在EL中获取列表大小:
<h:outputText value="#{bean.list.size()}" />
Run Code Online (Sandbox Code Playgroud)
或者使用参数调用action方法:
<h:commandButton value="edit" action="#{bean.edit(item)}" />
Run Code Online (Sandbox Code Playgroud)
这在我的环境中似乎不起作用.它似乎不喜欢括号.
javax.el.ELException:错误解析:#{bean.list.size()}
com.sun.el.parser.ParseException:遇到"("
我有一个显示文件夹内容的JSF页面(实际上它是一个dropbox的帐户内容).
我正在使用dataTable来呈现ListArray对象的内容:
<h:dataTable style="text-align: left" width="600" var="dContent" value="#{backedBean.contents}">
<h:column>
<f:facet name="header">
<f:verbatim>NAME</f:verbatim>
</f:facet>
<h:commandButton value="#{dContent.fileName}" action="#{backedBean.updateContents(dContent)}"/>
</h:column>
<h:column>
<f:facet name="header">
<f:verbatim>SIZE</f:verbatim>
</f:facet>
<h:outputText value="#{dContent.size}"/>
</h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
但是当我运行此页面时,我收到以下错误:
/browse.xhtml @ 34,110 action ="#{backedBean.updateContents(dContent)}"错误解析:#{backedBean.updateContents(dContent)}
...
...
由以下引起:org.apache.el.parser.ParseException:遇到""(""(""在第1行,第28栏.期待其中一个:
"}"...
"."......
""
""
"" ">"... "gt".. .
"<"...
"lt"...
"> ="......
"ge"
...
......
有趣的是,Netbeans能够自动完成方法名称,所以我想象我的后端bean是好的.仅当我使用参数调用方法时才会出现此问题.
有任何想法吗?
非常感谢
我有3页:
main.xhtmlagreement.xhtmlgenerated.xhtml将agreement.xhtml需要两个参数正确加载:serviceId和site.所以,正常的网址看起来像这样:/app/agreement.xhtml?site=US&serviceId=AABBCC.
我有这个按钮 agreement.xhtml
<h:form>
<h:commandButton value="Generate License File" action="#{agreement.generateMethod}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
该@RequestScoped豆#{agreement}有这样的方法:
public String generateMethod(){
.......
return "generated";
}
Run Code Online (Sandbox Code Playgroud)
我需要,在点击时,generateMethod()方法被执行,完成后,用户被重定向到generated.xhtml页面.发生了什么事是,在点击,网页浏览器发送的用户/app/agreement.xhtml,而且由于它不发送参数site和serviceId,它崩溃.
我尝试过generateMethod()返回a "generated?faces-redirect=true",但仍然没有.有任何想法吗?
我目前遇到了JSF执行顺序的问题.
看看我的示例代码:
<p:commandButton action="update.xhtml" ajax="false"
icon="ui-icon-pencil"
actionListener="#{marketingCodeBean.initForUpdate}">
<f:setPropertyActionListener
target="#{marketingCodeBean.marketingCode}" value="#{code}"></f:setPropertyActionListener>
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)
我想使用setPropertyActionListener设置bean属性,并对actionListener = initForUpdate进行一些处理.但是JSF默认执行顺序是相反的,actionListener首先在setPropertyActionListener之前.这个问题有干净的解决方法吗?
我正在考虑使用actionListener并将bean参数传递给它,但我不确定这是否是最好的方法.
我在JSF支持bean中有以下方法:
public List<Rent> getTopMemebers(){
return rentDAO.findByMonthAndYear(MonthReport, YearReport);
}
Run Code Online (Sandbox Code Playgroud)
我在数据表中显示:
<p:dataTable value="#{rentController.topMemebers}" var="item">
<p:column>
<h:outputText value="#{item.rentid}"/>
</p:column>
...
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
但我得到以下例外:
SEVERE: Error Rendering View[/admin/index.xhtml]
java.lang.NumberFormatException: For input string: "rentid"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)
at javax.el.ArrayELResolver.toInteger(ArrayELResolver.java:375)
at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:195)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175)
at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
at com.sun.el.parser.AstValue.getValue(AstValue.java:116)
at com.sun.el.parser.AstValue.getValue(AstValue.java:163)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:102)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
at javax.faces.component.UIOutput.getValue(UIOutput.java:168)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:338)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at org.primefaces.component.datatable.DataTableRenderer.encodeRow(DataTableRenderer.java:489)
at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:416)
at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:164)
at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:80)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620) …Run Code Online (Sandbox Code Playgroud) 我在index.xhtml上有一个数据库
<h:dataTable style="border: solid 2px black;"
value="#{IndexBean.bookList}" var="item"
binding="#{IndexBean.datatableBooks}">
<h:column>
<h:commandButton value="Edit" actionListener="#{IndexBean.editBook}">
<f:param name="index" value="#{IndexBean.datatableBooks.rowIndex}"/>
</h:commandButton>
</h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
我的豆子:
@ManagedBean(name="IndexBean")
@ViewScoped
public class IndexBean implements Serializable {
private HtmlDataTable datatableBooks;
public HtmlDataTable getDatatableBooks() {
return datatableBooks;
}
public void setDatatableBooks(HtmlDataTable datatableBooks) {
this.datatableBooks = datatableBooks;
}
public void editBook() throws IOException{
int index = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("index").toString());
System.out.println(index);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,即使单击不同的编辑按钮,我总是在服务器日志中获得相同的索引.想象一下,有一个集合提供给数据表.我没有在bean中表明过.
如果我将范围从ViewScope更改为RequestScope,它可以正常工作.可能是什么问题@ViewScoped?提前致谢 :)
编辑:
<h:column>
<h:commandButton value="Edit" actionListener="#{IndexBean.editBook}" />
</h:column>
Run Code Online (Sandbox Code Playgroud)
public void editBook(ActionEvent ev) throws IOException{
if (ev.getSource() != …Run Code Online (Sandbox Code Playgroud) 我有一个XHTML页面,提交回归自己.辅助bean是会话范围的.在重定向到自身时,页面呈现h:datatable两次,并给我重复的id错误.我可以直观地看到表格被渲染两次,彼此相邻.
**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:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<f:view>
<h:form >
<h:dataTable binding="#{ecole.dataTable}" value="#{ecole.getEcoleList()}" var="c"
border="0" width="100%" cellpadding="0" cellspacing="0"
styleClass="order-table"
headerClass="order-table-header"
rowClasses="order-table-odd-row,order-table-even-row"
>
<h:column>
<f:facet name="header">
ID
</f:facet>
#{c.idEcole}
</h:column>
<h:column>
<f:facet name="header">
Nom
</f:facet>
#{c.nomEcole}
</h:column>
<h:column>
<f:facet name="header">
Description
</f:facet>
#{c.desc_ecl}
</h:column>
<h:column>
<f:facet styleclass="options-width" name="header">
Options
</f:facet>
<h:commandLink action="#{ecole.editEcoleItem()}" title="Edit" >
<h:graphicImage style="border:0" url="/icones/b_edit.png" />
</h:commandLink>
   
<h:commandLink title="Delete"
onclick="return confirm('Voulez-vous confirmer la suppression?') ;"
action="#{ecole.deleteEcole(c)}"
>
<h:graphicImage …Run Code Online (Sandbox Code Playgroud) 我正在使用JSF数据表.表中的一列是命令按钮.
单击此按钮时,我需要使用表达式语言传递几个参数(如所选行的值).这个参数需要传递给JSF托管bean,它可以对它们执行方法.
我使用了以下代码片段,但我在JSF bean上获得的值始终为null.
<h:column>
<f:facet name="header">
<h:outputText value="Follow"/>
</f:facet>
<h:commandButton id="FollwDoc" action="#{usermanager.followDoctor}" value="Follow" />
<h:inputHidden id="id1" value="#{doc.doctorid}" />
</h:column>
Run Code Online (Sandbox Code Playgroud)
豆方法:
public void followDoctor() {
FacesContext context = FacesContext.getCurrentInstance();
Map requestMap = context.getExternalContext().getRequestParameterMap();
String value = (String)requestMap.get("id1");
System.out.println("Doctor Added to patient List"+ value);
}
Run Code Online (Sandbox Code Playgroud)
如何使用命令按钮将值传递给JSF托管bean?
jsf ×9
jsf-2 ×6
facelets ×3
java ×2
arguments ×1
datatable ×1
el ×1
managed-bean ×1
methods ×1
navigation ×1
view-scope ×1
viewparams ×1