我知道这个问题被问了很多次,我读了很多,但我认为我缺少基本的东西,所以它对我不起作用..
(项目在 JSF2、Netbeans 7.3beta、Glassfish3.. 和用 WCF 编写的 Web 服务中)我已经做了什么:
- 创建一个 JSF2 项目。
- 右键单击项目,新建 Web 服务客户端。填写 WSDL URL。结束
- 创建 ManagedBean,打开它。从我的 Web 服务中拖放“DoWork”方法。
看看我的简单代码(我有 index.html,我在其中显示 DataTable,它是在我的 managedbean 中创建的) index.html
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"> <h:head><title>IGNORED</title></h:head> <h:body> <ui:composition template="/templates/masterPage.xhtml"> <ui:define name="content"> <h:form> <h3>and #{bean.tst}!</h3> <p:dataTable value="#{bean.rows}" var="row"> <p:columns value="#{bean.columns}" var="column" headerText="#{bean.headers[column]}"> #{row[column]} </p:columns> </p:dataTable> </h:form> </ui:define> </ui:composition> </h:body> </html>
和... bean.java
@Named(value = "bean")
@SessionScoped
public class Bean implements Serializable {
@WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_62599/TestService.svc.wsdl")
private TestService service;
... // list, maps.. not important for this example
public Bean() {
columns = new ArrayList<String>();
rows = new ArrayList<Map<String, Object>>();
headers = new HashMap<String,String>();
// Columns:
for(int i = 0 ; i < 4 ; i++)
{
String column_id = "c" + i;
String column_name = "Column name " + i;
columns.add(column_id);
headers.put(column_id, column_name);
}
// Rows:
for(int i = 0 ; i < 100 ; i++)
{
Map<String,Object> m = new HashMap<String,Object>();
m.clear();
for(int j = 0 ; j < 4 ; j++)
{
**// HERE IT DOESNT WORK in table i've got Content:Null**
m.put("c" + j, "Content:" + Tst);
}
rows.add(m);
}
}
private String Tst;
public String getTst() {
return doWork("Test");
}
private String doWork(java.lang.String str) {
DataTable.ITestService port = service.getBasicHttpBindingITestService();
return port.doWork(str);
}
}
为什么我不能在我的托管 bean 中使用它?我做错了什么?我想在 bean 中使用它,这样我就可以填充我的 DataTable ...