我创建了一个网页,它检查来自 URL 的视图参数,并调用 bean 的 init 方法来检索该用户。然后用该用户的信息填充该页面上的字段。
但是出了点问题。
我的 Facelets 页面:
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Tweetpage of #{userBean.getName()}</title>
</h:head>
<h:body>
<f:metadata>
<f:viewParam name="user" value="#{userBean.name}" />
<f:event type="preRenderView" listener="#{userBean.init}" />
</f:metadata>
<h:commandButton value="Login" action="#{loginBean.login()}" id="login" />
<div class="namebox">
<label>User: #{userBean.name} </label> <br/>
<br/>
</div>
</h:body>
</html>
和 UserBean.java:
package beans;
import ...
@Named
@RequestScoped
public class UserBean implements Serializable {
private String userName;
private String name;
private String bio;
private String web;
private Collection<Tweet> tweets;
private Collection<User> followers;
private User user;
@Inject
private @Named(value = "kwetterService")
KwetterService service;
@PostConstruct
public void init(ComponentSystemEvent event) throws AbortProcessingException {
System.out.println(name);
user = service.find(name);
if (user != null)
{
name = user.getName();
bio = user.getBio();
web = user.getWeb();
tweets = user.getTweets();
followers = user.getFollowing();
}
}
}
由于System.out.println(name)
没有调用,我认为网页不会调用 init。如果我在没有 URL-adaptions ( http://localhost:8080/KwetterJSF/
) 的情况下启动网页,我会收到以下错误消息:
WELD-000049 无法在 beans.UserBean@3c836d3d 上调用 [method] @PostConstruct public beans.UserBean.init(ComponentSystemEvent)
如果我添加参数 ( http://localhost:8080/KwetterJSF/index.xhtml?user=Sjaak
),我会得到以下信息:
User: #{userBean.name}
我对此不是很有经验,即使我自己研究了一下,我也无法弄清楚。有人知道解决方案吗?