Предайте param чрез h:link, като използвате bean със същия обхват на изгледа (има стойност null и следователно няма да бъде добавен към URL адреса)

Имам един bean с обхват на изгледа и искам параметър за предаване между две различни страници и на първата страница преди тази връзка имам <p:selectOneMenu/>, където избирам тест кой идентификатор трябва да бъде подаден като параметър GET

<p:selectOneMenu value="#{addQuestion.test}" id="tests"
    converter="#{testConverter}" required="true" requiredMessage="Please, choose test">
    <f:selectItem itemLabel="--Select a test--" itemValue="" />
    <f:selectItems value="#{addQuestion.testList}" var="testItem"
        itemValue="#{testItem}" itemLabel="#{testItem.testName}" />
    <p:ajax process="@this"
        listener="#{addQuestion.getQuestionsBySubject()}"
        update="addingQuestionsTable, testId" />
</p:selectOneMenu>
<h:link value="Add new question" outcome="addQuestion">
    <f:param id="testId" name="testId" value="#{addQuestion.test.testIdentifer.testId}"/>
</h:link>

//на втора страница

<f:metadata>
    <f:viewParam name="testId"
        value="#{addQuestion.test.testIdentifer.testId}"
        converter="#{testConverter}" required="true" requiredMessage="Invalid page access. Please use a link from within the system."/>
</f:metadata>

И боб

@ManagedBean(name = "addQuestion")
@ViewScoped
public class AddQuestion implements Serializable {
    private Test test;
    //get
    //set
}

Но когато се опитам да получа стойност на втора страница, не получавам нищо в израз #{addQuestion.test.testIdentifer.testId}" И също така в режим на разработка получавам

има стойност null и следователно няма да бъде добавен към URL адреса.

Моят #{testConverter} е управляван bean в обхвата на изгледа.

Как мога да предам testId в един bean с обхват на изглед и защо получавам тази грешка?


person Ray    schedule 12.12.2012    source източник


Отговори (1)


Етикетите <f:xxx> като <f:param> не генерират никакъв HTML и следователно няма какво да се актуализира в HTML DOM дървото при ajax заявка. Компонентите <h:xxx> са тези, които генерират HTML и могат да се актуализират в дървото на HTML DOM при заявка на ajax. Трябва да актуализирате компонента <h:link> вместо маркера <f:param>. И така, преместете това id от <f:param> на <h:link>.

<h:link id="testId" value="Add new question" outcome="addQuestion">
    <f:param name="testId" value="#{addQuestion.test.testIdentifer.testId}"/>
</h:link>
person BalusC    schedule 12.12.2012
comment
И аз също имам въпрос. На първата страница трябва да изпратя само testId в <f:param/>, защото не мога да задам validator на param, но на втората страница стойността трябва да бъде зададена като обект в <f:viewParam/> или като само id? - person Ray; 12.12.2012