我在 facelets 中使用自定义组件遇到问题。第一次呈现页面时,属性在组件类上正确设置。然而,当提交表单时,属性未设置。
这是我用来测试的类。
public class TestEcho extends UIData
{
/** Logger. */
private static Log log = LogFactory.getLog(TestEcho.class);
private String msg;
public TestEcho()
{
log.debug("Constructor.");
}
public void encodeEnd(FacesContext context) throws IOException
{
ResponseWriter writer = context.getResponseWriter();
writer.startElement("div", this);
writer.writeText("The value of msg is " + msg + " .", null);
writer.endElement("div");
}
public void setMsg(String msg)
{
log.debug("Setting msg to " + msg + " .");
this.msg = msg;
}
}
这个组件在 .xhtml 页面中像这样使用。
<h:form>
<v:testEcho msg="hello" />
<h:commandButton action="#{PictureManager.trigger}" value="Click" />
</h:form>
当页面首次呈现时,组件呈现以下HTML代码。
<div>The value of msg is hello .</div>
当点击按钮时,它呈现出这个。
<div>The value of msg is null .</div>
从日志中可以看到,组件再次构建,但属性未设置。
13:23:42,955 DEBUG [TestEcho] Constructor.
13:23:42,955 DEBUG [TestEcho] Setting msg to hello .
----- Button was pressed here -----
13:25:48,988 DEBUG [TestEcho] Constructor.
13:25:49,144 DEBUG [PictureManager] Button pressed.
据我所了解,Facelets 可以将所有属性与组件相连接,因此我不需要标签类,但是我不明白为什么属性第一次设置正确,而第二次设置错误。