Вот пример g: link, передающий одну пару имя-значение. Чтобы добавить несколько, просто добавьте запятую и вторую пару значений имени в квадратных скобках.
<g:link role="button" class="btn btn-success" action="details" params="${['folderNumber' : instance.fileFolderNumber]}" title="Details">Details</g:link>
Обратите внимание, что g: remoteLink устарела. Я перешел на использование JQuery для выполнения вызовов Ajax.
Типичной проблемой со множественным наследованием является "ромбовидная проблема".
A
/ \
B c
\ /
D
Если виртуальный метод в A реализован и B и C, какой Вы получаете при создании D?
Причина это не проблема с интерфейсами, состоит в том, потому что интерфейсы не имеют реализаций, поэтому если A/B/C являются всеми интерфейсами, то D выбирает, как реализовать, методы любым способом являются соответствующими.
Это, как воспринимают, является злым, потому что это просто более сложно и поднимает больше вопросов, чем люди обычно ожидают, особенно где базовые классы не чисто абстрактны (никакие элементы данных). Ромбовидное наследование может быть решено с помощью виртуального наследования, где общая база совместно используется. И компиляторы могут поймать коллизии сигнатуры метода. Используемый хорошо, это может произвести изящный и решения DRY, которые являются иначе более подробными для реализации через интерфейс и составы/делегации.
Одна общая идиома MI в C++ для сложных конструкторов обертки, где основной конструктор должен быть создан с нетривиальными членскими объектами, и так как базовые объекты должны быть созданы, прежде чем участник возражает, прием должен использовать MI ("основа от участника" идиома.), иначе необходимо использовать фабрику и больше шагов, чтобы сделать, конструкция как Java делает (Java не имеет MI для неинтерфейсных классов).
Не бойтесь его и используйте его, когда соответствующий (хотя могла бы потребоваться некоторая практика для определения хорошей подгонки).
MI не является таким большим количеством зла как очень сложным решением редкой проблемы. В большинстве случаев существует лучший способ сделать то же самое.
Как делают Вы согласовываете, если реализации метод, названный z и b, реализует метод, названный z, и Вы имеете:
ребенок: a, b
теперь, если мой клиентский код звонит новому ребенку ().z (). Какую реализацию называют? Я не думаю так как, что его зло это просто поднимает много липких вопросов и обеспечивает мало значения