Jsf 2 h:JSF复合组件中的INPUTHIDEN未提交给支持bean
我正在创建一个基于CodeMirror文本编辑器的JSF复合组件,它的功能非常简单。现在我的组件按预期显示(基本编辑器加上一个额外的CodeMirror实例进行比较) 我的代码:Jsf 2 h:JSF复合组件中的INPUTHIDEN未提交给支持bean,jsf-2,codemirror,composite-component,Jsf 2,Codemirror,Composite Component,我正在创建一个基于CodeMirror文本编辑器的JSF复合组件,它的功能非常简单。现在我的组件按预期显示(基本编辑器加上一个额外的CodeMirror实例进行比较) 我的代码: <cc:interface> <!-- attributes --> ... </cc:interface> <cc:implementation> <h:outputStylesheet library="..." name="..."
<cc:interface>
<!-- attributes -->
...
</cc:interface>
<cc:implementation>
<h:outputStylesheet library="..." name="..." />
...
<h:outputScript library="..." name="..." />
...
<div id="#{cc.clientId}">
<h:panelGroup id="pgContent" styleClass="#{cc.attrs.styleClass}" style="#{cc.attrs.style}" rendered="#{cc.attrs.rendered}">
<h:inputHidden id="#{cc.clientId}_inputHiddenMain" value="#{cc.attrs.value}" immediate="true">
<c:if test="#{not empty cc.attrs.converter}">
<f:converter converterId="#{cc.attrs.converter}" />
</c:if>
</h:inputHidden>
<h:inputHidden id="#{cc.clientId}_inputHiddenLeft" value="#{cc.attrs.origLeft}" immediate="true" rendered="#{cc.attrs.origLeft ne null}">
<c:if test="#{not empty cc.attrs.converter}">
<f:converter converterId="#{cc.attrs.converter}" />
</c:if>
</h:inputHidden>
<h:inputHidden id="#{cc.clientId}_inputHiddenRight" value="#{cc.attrs.origRight}" immediate="true" rendered="#{cc.attrs.origRight ne null}">
<c:if test="#{not empty cc.attrs.converter}">
<f:converter converterId="#{cc.attrs.converter}" />
</c:if>
</h:inputHidden>
</h:panelGroup>
</div>
<script type="text/javascript">
/* <![CDATA[ */
if(#{cc.attrs.rendered}){
if (!com) {
var com = {};
}
if (!com.example) {
com = {
example: {}
};
}
if (!com.example.faces) {
com.example = {
faces: {}
};
}
if (!com.example.faces.codemirrormerge) {
com.example.faces.codemirrormerge = {
init: function(id, clientId, styleClass, ...) {
var cmmInput = $("[id='" + clientId + ":" + id + "_inputHiddenMain']"),
cmmOrigLeft = $("[id='" + clientId + ":" + id + "_inputHiddenLeft']"),
cmmOrigRight = $("[id='" + clientId + ":" + id + "_inputHiddenRight']"),
target = $('.' + styleClass),
options = {
value: cmmInput.val(),
revertButtons : revertButtons,
showDifferences : showDifferences,
connect : connect,
collapseIdentical : collapseIdentical,
mode: mode,
theme: theme,
autoRefresh: true,
...
},
myCodeMirrorMerge = CodeMirror.MergeView(target[0], options),
myCodeMirror = myCodeMirrorMerge.editor();
myCodeMirror.on("blur", function() {
$("[id='" + clientId + ":" + id + "_inputHiddenMain']").val(myCodeMirror.getValue());
});
}
}
}
// init component
com.example.faces.codemirrormerge.init('#{cc.attrs.id}', '#{cc.clientId}', '#{cc.attrs.styleClass}', ...);
}
/* ]]> */
</script>
</cc:implementation>
,inpurthidden
value和编辑器内容应该在一个支持bean中提交,但它不是。我还尝试使用process=“@(.myStyleClass)”
显式处理整个组件,但没有成功
所以我的问题是:inpurthidden
值为什么没有在支持bean中提交
谢谢 这个
id=“#{cc.clientId}\u inputHiddenMain”
真的应该是你所有inputhidden的id=“#{cc.id}\u inputHiddenMain”
吗?完全错过了,谢谢!你应该为我的问题写一个答案,可能对其他用户有用。
<myns:codeMirrorMerge id="inputContent" styleClass="myStyleClass" origLeft="#{bean.origLeft}" origRight="#{bean.origRight}" value="#{bean.content}" converter="escapeConverter" mode="text/x-plsql" theme="eclipse"
matchBrackets="true" closeBrackets="true" activeLine="true" autocompleteSql="true" lineWrapping="true" />
<p:commandButton id="btnSave" value="Save" action="#{bean.saveContent}" />