我一直在用JSF2.0 TomEE 1.7.3开发一个网站。在我问的最后一个问题中:
建议使用TomEE1.7.x的JSF依赖项是什么?
我得到了建议,决定从GlassFish(Mojarra)Faces迁移到myFaces,因为myFaces是TomEE的标准JSF实现。
然后我意识到,如果我使用TomEE的默认myFaces,"OmniFaces v1.8.3 Form"不会用"style"或"styleClass"来呈现css类属性。它在Mojarra上运行得很好,但现在我的HTML布局坏了,我必须修复它
我使用"OmniFacesForm"的原因是,我真的想使用includeRequestParams="true"
功能,这在Mojarra和myFaces中都有效。
我的xhtml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:o="http://omnifaces.org/ui"
>
<h:body>
<ui:composition template="templates/common.xhtml">
<ui:define name="content">
<o:form prependId="false" styleClass="form-horizontal" includeRequestParams="true">
<!-- some inputText, labels, and buttons here -->
</o:form>
</ui:define>
</ui:composition>
</h:body>
</html>
我在HTML中得到的是:
<form id="j_id_1k" name="j_id_1k" method="post" action="/foo.xhtml">
不呈现class="form-horizontal"
。
我是不是错过了什么?xmlns是错误的还是被弃用了?或者这只是模块之间的不一致,而我对此无能为力?或者有类似于includeRequestParams
的东西吗?
我尝试过这样的方法,用javascript将css类附加到表单标签上(我知道这不是一个好方法):
(function() {
var forms = document.forms;
for (var i = 0; i < forms.length; i++){
if (forms[i].id !== "headerForm"){
forms[i].class = "form-horizontal";
}
}
})();
但它并没有修复布局,可能是因为css样式附加到表单内部的对象,而不是表单本身(我使用的是css引导)。
请帮帮我!非常感谢。
这是<o:form>
中的一个错误。它最初是从UIForm
类扩展而来的,但并没有定义所有非公共属性。我把它改为从HtmlForm
扩展,现在它在MyFaces中也适用于我。它在今天的2.3-SNAPSHOT.中可用