Open the menu

    Controles

    Controles são responsáveis pela interação com o usuário e geração de front-end para interface de serviço.

    Para implementar controles, é necessário implementar IControl ou alguma interface que a estende. Controles podem armazenar um valor IDataControl, e também podem estar vinculados a um campo de um source IDataBoundControl. Há controles cuja função é especificamente validar dados entrados pelo usuário IValidatorControl.

    Ao invés de implementar diretamente alguma dessas interfaces citadas, pode-se estender uma de suas implementações, o que facilita a criação de um controle. Por exemplo, classes como Control, DataControl, DataBoundControl e ValidatorControl podem ser estendidas. Dessa forma, toda a lógica genérica do controle já estará implementada e o desenvolvedor pode focar apenas nos aspectos específicos do controle.

    Portanto, os controles podem ser divididos em:

    • Control: Controles de layout apenas;
    • Data Control: Controles de layout, mas também são responsáveis pela persistência de dados trocados entre o cliente (browser) e o servidor;
    • Data Bound Control: Controles que acessam um ou mais sources e disparam processes actions. Os controles de formulário fazem parte desta classificação, pois manipulam dados.

    As etapas principais no ciclo de vida de um controle são:

    • Execução do método init;
    • Execução do método buildSubControls;
    • Execução do método loadFromRequest caso o IDataControl esteja implementado,
    • Execução do método serverValidate caso o IValidatorControl seja implementado e a requisição for um process action;
    • Execução do método setRenderData se for uma requisição de renderização;
    • Execução do método setProcessActionHandlerParameters se for uma requisição de process action.

    Além disso, na implementação em DataBoundControl, o controle se registra como um observador de seu source. Sempre quando os dados do source são carregados, essa implementação executa o método setValueFromSource, que atribui ao controle o valor que está no campo a que ele está associado. Um override nesse método permite a customização de como o valor de um controle é lido do source.

    Quando o método setRenderData de um controle é executado, o controle deve acrescentar em seu XML os dados que deseja disponibilizar para o XSL, que é responsável por gerar o código HTML que será renderizado no navegador.

    Outros XSLs podem ser criados, para que o controle possa ser renderizado com diferentes designs, enquanto que a implementação da funcionalidade do controle continua a mesma, implementada na classe Java.