2012-10-07 1 views
2

Я реализую пользовательский компонент с композитным. Исходный код моего композитной compoment только следующим образом:Нужна помощь по завершению реализации пользовательского компонента с помощью композита

<cc:interface componentType="selectOneRadio" 
       xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:cc="http://java.sun.com/jsf/composite"> 
    <cc:attribute name="direction" default="next" /> 
</cc:interface> 

, как вы можете видеть, что я не использую раздел implementation, но это не проблема для меня, если я должен использовать его.

Затем я сделать это содержание с Java следующим образом:

public void encodeChildren(FacesContext context) throws IOException { 
    ... 
} 

Этот элемент управления генерирует целое значение на основе значения атрибута с именем: «направление». Если это значение «следующее», тогда сгенерированное значение является текущим днем ​​месяца плюс 1, и если это значение «назад», то сгенерированное значение является текущим днем ​​месяца минус 1.

Я бы хотел знаете, как я могу передать это сгенерированное значение в бэкэнд-бэк, когда пользователь нажимает на <h:commandButton />, который я добавляю после моего пользовательского компонента?

Нужно ли использовать <f:ajax /> или что-то в этом роде?

Другой вопрос, кстати, мог ли я сделать мой составной компонент с Java и <cc:implementation /> в то же время (смешивание)?

Спасибо.

ответ

0

Вам необходимо выполнить обработку обработки формы в методе decode().

@Override 
public void decode(FacesContext context) { 
    // ... 
} 

Вы можете получить атрибут как ValueExpression унаследованной getValueExpression() методом. Вы можете выполнить операцию «set», используя ValueExpression#setValue(). Например.

<my:composite ... value="#{bean.foo}" /> 

с

ValueExpression value = getValueExpression("value"); 
value.setValue(context.getElContext(), newValue); 

установит newValue соответствующим образом на свойстве, представленного #{bean.foo}.

+0

Привет @BalusC, с вашими предложениями выше, я могу передать сгенерированное значение контроллеру поддержки, спасибо. Но с моим вопросом выше я слишком упростил свою реальную ситуацию, а затем мне нужно немного дополнять ваш ответ. Моя реальная ситуация [здесь] (http://stackoverflow.com/questions/12526211/how-to-render-a-composite-component-using-a-custom-renderer), и мне нужно получить (внутри метода декодирования) значение выбранного: ''. Каждый '' отображается как радиокнопка (' Angel

+0

Внутри декодирования вы должны захватить переданное значение из карты параметров запроса. Например. 'ExternalContext.getRequestParameterMap(). Получить (ClientId)'. – BalusC

+0

Большое спасибо @BalusC, теперь он работает довольно хорошо;) – Angel

 Смежные вопросы

  • Нет связанных вопросов^_^