Как вызвать метод действия компонента UICommand, который был представлен условно? - PullRequest
1 голос
/ 15 июня 2010

метод действия не называется Пожалуйста, обратитесь к этому вопросу -, Один из моих компонентов UICommand отображается условно, как было сказано в ответе на связанный вопрос - пункт 5 - что если компонент или любой его родительские визуализированные или отключенные атрибуты являются ложными - тогда метод действия не будет вызван? Если это так, как я могу достичь той же функциональности? Есть ли работа вокруг? или трюк? или любой другой подход?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 15 июня 2010

Кстати, вы хотели бы сохранить свойство, отвечающее за условие rendered в следующем запросе. Есть несколько решений этой проблемы:

  1. Поместите бин в область действия сеанса. Это легко, но больно. Это плохо для пользователя, так как изменения будут отражены во всех вкладках / окнах, открытых пользователем в одном сеансе.

  2. Используйте <h:inputHidden> для передачи собственности. Теоретически это легко, но на практике это тоже больно. Именно это значение будет потеряно при возникновении ошибки проверки / преобразования в любом другом входе в той же форме. Это странность в том, как JSF обрабатывает скрытые элементы ввода. Обходной путь должен использовать <h:inputHidden binding="#{bean.hidden}"> и делать hidden.getValue() и hidden.setValue() в бобе.

  3. Если вы используете <h:commandLink> вместо <h:commandButton>, тогда вы можете использовать <f:param> для передачи свойства. Он будет доступен в качестве параметра запроса, вы можете проверить его в конструкторе (post) компонента.

  4. Используйте Томагавк <t:saveState>. Идеальное решение до сих пор. Это сохранит значение (или даже полный бин) в следующем запросе.

Если вы уже используете JSF 2.0, @ViewScoped решит все это. Он ведет себя как <t:saveState>.

Смотри также:

0 голосов
/ 16 июня 2010

В моем случае, Javascript пришел на помощь, что означает, что, что бы ни отображалось условно, поместите их в HTML-часть и не отображайте их display: none, пока не произойдет желаемое событие.

Часть HTML может иметь любые теги JSF (включая CommandButtons) по вашему желанию и будет работать (вызывая методы действий и прочее) совершенно нормально.

0 голосов
/ 15 июня 2010

Хитрость заключается в том, чтобы «визуализировать» значение true, когда пришло время запустить действие, а затем изменить условие на false в методе действия.

Допустим, у вас есть рендеринг ссылки на основелогический в вашем бине называется «редактирование».Тогда ваше действие будет выглядеть примерно так:

public String myAction() {
    // whatever you want your action to do

    editing = false;
}

Edit: это предполагает, что bean-компонент либо является областью действия сеанса, либо логическое значение распространяется между запросами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...