Java JSF,writeAttribute(";value";,str,null)使用通过ValueExpression.getValue()获得的字符串失败
我在自定义JSF组件方面遇到了一些奇怪的问题 以下是我的渲染器代码:Java JSF,writeAttribute(";value";,str,null)使用通过ValueExpression.getValue()获得的字符串失败,java,jsf,Java,Jsf,我在自定义JSF组件方面遇到了一些奇怪的问题 以下是我的渲染器代码: public class Test extends Renderer { public void encodeBegin(final FacesContext context, final UIComponent component) throws IOException { ResponseWriter writer = context.getRespon
public class Test extends Renderer {
public void encodeBegin(final FacesContext context,
final UIComponent component) throws IOException {
ResponseWriter writer = context.getResponseWriter();
writer.startElement("textarea", component);
String clientId = component.getClientId(context);
if (clientId != null)
writer.writeAttribute("name", clientId, null);
ValueExpression exp = component.getValueExpression("value");
if (exp != null && exp.getValue(context.getELContext()) != null) {
String val = (String) exp.getValue(context.getELContext());
System.out.println("Value: " + val);
writer.writeAttribute("value", val, null);
}
writer.endElement("textarea");
writer.flush();
}
}
该代码生成:
<textarea name="j_id2:j_id12:j_id19" value=""></textarea>
生成的html是:
<textarea name="j_id2:j_id12:j_id19" value="new string"></textarea>
控制台输出为“Value1:测试,Value2:新字符串”
这是怎么回事?这没有道理。为什么writeAttribute会区分这两个字符串
其他信息:
- 该组件扩展了UIComponentBase
- 我将它与facelets一起使用
<textarea name="j_id2:j_id12:j_id19">new string</textarea>
新字符串
查看原始JSF TextAreaRenderer源代码以获取更多提示。然后我们测试@ccomet是否可以在一个非常旧的源代码上工作。
<textarea name="j_id2:j_id12:j_id19">new string</textarea>