t:的值没有被传递给Myfaces 2.1中的Backing Bean

时间:2014-01-19 22:44:58

标签: jsf-2 myfaces tomahawk selectoneradio

我遇到一个问题,即t:radio(与t:selectOneRadio相关联)的值未传递给辅助bean。我们目前正在使用JFoss 7.2.0上的MyFaces 2.1.13从JSF 1.x转换为JSF 2.x,我们确实拥有2.0版本的Tomahawk库。我花了好几个小时尝试不同的东西让它工作,搜索高低,但找不到其他人遇到同样的问题。我已经确定,一旦检查了值,就不会调用setter。

我已经提取了代码并对其进行了简化,但仍未在ajax调用中传递任何内容。

<h:form id="profileReport">

    <h:messages />

    <h:panelGrid columns="2">

        <t:selectOneRadio id="selectQuestionnaire" layout="spread" required="true" 
                value="#{viewProfile.selectedQuestionnaire}">
            <f:selectItem itemValue="SC_PRE!20121212095427.0000000.059814626868021525" /> 
            <f:ajax event="click" execute="@this" render="profileReport:selectTemplate profileReport" />    
        </t:selectOneRadio>

        <h:outputLabel for="selectQuestionnaire" value="#{prmsgs.firstQuestionnaireLabel}" styleClass="labelText" />
        <t:radio index="0" for="profileReport:selectQuestionnaire" />

        <h:outputLabel for="selectTemplate" value="#{prmsgs.exploratoryProcessTemplate}:" styleClass="labelText" />
        <h:selectOneListbox id="selectTemplate" value="#{viewProfile.selectedInterpretiveProfileTemplateId}" required="#{menuNavigation.selectInterpretiveProfileActive}">
            <f:selectItems value="#{viewProfile.interpretiveProfileTemplates}"/>
        </h:selectOneListbox>
    </h:panelGrid>
</h:form>

出于测试目的,我用h:selectOneRadio取代了t:selectOneRadio并调用了setter。然后我尝试了t:selectOneRadio而没有t:radio而且工作正常。所以它似乎是t:radio的一个问题,虽然我不确定它到底是什么。我知道Icefaces具有类似的功能,但我不想在此时引入另一个完整的组件库。我们正在努力尽可能减少变更,因为这是一个非常精益的转换过程。

1 个答案:

答案 0 :(得分:1)

当t:selectOneRadio layout =“spread”时,t:selectOneRadio是一个组件而t:radio是另一个组件,即使它们一起工作。在这种情况下,当执行ajax请求时,生命周期将在t:selectOneRadio上执行,但不会对t:radio执行。 f:ajax组件不能以这种方式覆盖,因此一旦启动它就不可能在生命周期中包含t:radio。