Задать вопрос
  • Linq, связь многие ко многим в EF?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Вообще, тут несколько вариантов. Мы можете руками добавить нужную связывающую таблицу в контекст.

    Или же сделать примерно так:

    var data = db.Products.Include("Repositories");
    var values = new List<ProductWithRepoDTO>();
    
    foreach(var record in data)
    {
        var reposArray = record.Repositories.Select(x=>x.Name).ToArray();
        var reposString = string.Join(",", reposArray);
        
        values.Add(new ProductWithRepoDTO
        {
            Id = record.Id,
            Name = record.Name,
            Cound = record.Count,
            Price = record.Price,
            Repository = reposString 
        });        
    }
    //дальше работать с values


    Второй подход на мой взгляд правильнее, т.к. вы уже работаете не доменной моделью, а с моделью представления, которая уже содержит удобные для отображения данные.
    Ответ написан
    1 комментарий
  • Как сохранить данные с WinForm?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Вообще, я бы сделал бы модель данных, привязал бы ее к контролам через DataBindings и сохранял/загружал бы уже именно ее.

    Пример с формой входа (на форме два текстовых поля, txtUserName и txtPassword, и две кнопки, buttonSave и buttonLoad):
    Форма
    public partial class Form1 : Form
    {
        private readonly LoginViewModel viewModel;
    
        public Form1()
        {
            InitializeComponent();
    
            viewModel = new LoginViewModel();
    
            txtUserName.DataBindings.Add(new Binding("Text", viewModel, "UserName", false, DataSourceUpdateMode.OnPropertyChanged));
            txtPassword.DataBindings.Add(new Binding("Text", viewModel, "Password", false, DataSourceUpdateMode.OnPropertyChanged));
    
        }
    
        private void buttonSave_Click(object sender, EventArgs e)
        {
            var file = GetFilePath();
    
            using (var buffer = File.OpenWrite(file))
            {
                var formatter = new BinaryFormatter();
    
                formatter.Serialize(buffer, viewModel);
            }
        }
    
        private void buttonLoad_Click(object sender, EventArgs e)
        {
            var model = LoadContent() as LoginViewModel;
    
            if (model != null)
            {
                viewModel.Password = model.Password;
                viewModel.UserName = model.UserName;
            }
        }
    
        private static object LoadContent()
        {
            var file = GetFilePath();
    
            if (!File.Exists(file))
                return null;
    
            using (var buffer = File.OpenRead(file))
            {
                var formatter = new BinaryFormatter();
    
                try
                {
                    return formatter.Deserialize(buffer);
                }
                catch
                {
                    //TODO Add error handling
                    return null;
                }
            }
        }
    
        private static string GetFilePath()
        {
            var directory = Path.GetDirectoryName(typeof(Form1).Assembly.Location);
            return Path.Combine(directory, "store.txt");
        }
    }


    Модель:
    [Serializable]
    public class LoginViewModel : INotifyPropertyChanged
    {
        private string _userName;
        private string _password;
    
        public string UserName
        {
            get { return _userName; }
            set
            {
                _userName = value;
                NotifyPropertyChanged(nameof(UserName));
            }
        }
    
        public string Password
        {
            get { return _password; }
            set
            {
                _password = value;
                NotifyPropertyChanged(nameof(Password));
            }
        }
    
        private void NotifyPropertyChanged(string name)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }
    
        [field: NonSerialized]
        public event PropertyChangedEventHandler PropertyChanged;
    }


    Как такого прямого процесса сериализации и десереализации формы нет, т.к. там очень много вещей в бэкграунде (свойства, события и т.п.), которые мешают этому процессу.

    Один из вариантов обхода, это именно DataBindings, как я показал на примере.
    Ответ написан
    Комментировать
  • Как в BAT-файле получить результат выполнения PW-скрипта?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Вот так я в BATCH-файле получал дату из PowerShell:
    @for /f %%i in ('powershell -NoLogo -Command "[DateTime]::Now.ToString(\"yyyy-MM-dd-HH-mm-ss\")"') do @set CurrDateTimeAsFileName=%%i


    Думаю, сможете адаптировать под себя.
    Ответ написан
    Комментировать
  • Как правильно сформировать вложенный запрос MySQL?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    А вы можете пример данных показать (с описанием)?
    У меня создалось ощущение, что чего-то не хватает - либо у вас не все таблицы тут указаны, либо структура не верная.

    UPD 13.07.2017:

    SELECT 
     @day:=DATE_FORMAT(t.`timestamp`, '%Y-%m-%d') `date`
    , @success:= (SELECT COUNT(id) FROM `tests` WHERE `totalQuestions` = `correctAnswers` AND DATE_FORMAT(`timestamp`, '%Y-%m-%d') = @day) `success`
    , @total:= (SELECT COUNT(id) FROM `tests` WHERE DATE_FORMAT(`timestamp`, '%Y-%m-%d') = @day) `total`
    , @success* 100 / @total `percent`
     
    FROM `tests` t
    GROUP BY  DATE_FORMAT(`timestamp`, '%Y-%m-%d')
    Ответ написан
    3 комментария
  • Проект-база знаний - на чем сделать?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Вообще, https://www.mediawiki.org/
    Там куда расширений, которые помогут хорошо оформить контент.
    Ответ написан
    Комментировать
  • Как настроить form symfony?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Если мне не изменяет память, атрибут
    [
    ...
    'label' => false
    ...
    ]

    регулирует, выводить Label для контрола или нет.
    Ответ написан
    Комментировать
  • Как получить в массиве данную в twig?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Т.е. вы для вывода JSON используете шаблонизатор?
    Я не спорю, гвоздь можно забить и электронным микроскопом, но.. зачем?

    Вы же видели, к примеру, вот это:
    php.net/manual/ru/function.json-encode.php
    https://github.com/kherge-php/json
    Ответ написан
  • Почему я не вижу приложение поднятое на IIS, который стоит за роутером(DMZ)?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Скорее всего, у вас не проброшен порт наружу.
    P.S. В комментах вы это и указали, добавьте свой ответ и отметьте его :) А то сразу не видно.
    Ответ написан
    Комментировать
  • Почему на Bonobo Git Server не отображаются некоторые элементы web приложения?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Мало информации.
    В БД пользователи как лежат, с этой информацией или без?
    Я лично разворачивал его, потом последовательно несколько раз обновлял - даже были ошибки обновления - но данная информация сохранялась.

    При редактировании эти данные отображаются?
    Ответ написан
  • Как переедать json в rest controller?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    А у вас Spring Security используется?
    Если да, а как вы токен csrf передаете?
    Ответ написан
    Комментировать
  • Чем паттерн Repository отличается от DataMapper?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Паттерн репозиторий дает унифицированный набор общих операций над сущностью в БД.
    Внутри репозитория может быть использован DataMapper. Назначение последнего именно в маппинге сущности из БД на доменную сущность (или модель).

    Информация:

    design-pattern.ru/patterns/repository.html
    design-pattern.ru/patterns/repository.html
    Ответ написан
    Комментировать
  • Можно-ли при узнать координаты устройства и вывести их в приложении на C#?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Для начала, вам нужно установить на машину GPS-устройство, которое будет слать данные на вашу службу (какая-то абстрактная служба в вакууме). Есть ряд таких устройств, можно нагуглить.
    Затем вам нужна подложка для карты, к примеру тот же OSM.
    Ну и наконец, само приложение, которое дергает с вашей службы данные, к примеру каждые 5 секунд (ну или через SignalR в режиме реального времени). Вы получаете координаты и рисуете их на контроле карты. Самый тупой и простой способ - использовать контрол веб-браузера и вызывать оттуда javascript-функцию, которая отрисует ваши координаты.
    Ответ написан
    2 комментария
  • Что выбрать для веб ado.net или entity framework?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Вот тут Когда используют низкоуровневый ADO.net, а когда Entity Framework?, мне кажется все разжевано.
    ADO.NET - низкоуровневая технология для обобщения доступа к данным.
    entity framework - ORM-библиотека для быстрого старта работы с данными. Быстрый старт и удобство работы != быстрой работе, вот в этом и состоит суть.

    Обычно делается микс, что-то обрабатывается посредством ORM, что-то на голых запросах + Dapper, к примеру.
    Ответ написан
    Комментировать
  • В чем проблема HTTP Status 404?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Измените код метода контроллера на вот этот и проверьте.
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String list(Model uiModel) {
    	List<HotelAudit> contacts = HotelService.findAll();
    	uiModel.addAttribute("contacts", contacts);
    	return "list";
    }


    • Вы указали базовый урл, на который мапится контроллер, но не указали куда смотрит метод, поэтому, скорее всего и 404.
    • Еще момент, не нужно указывать базовый путь к представлению, достаточно указать относительный.


    Вообще, я бы посоветовал вам изучить базовую информацию по работе со Spring Framework - там есть некоторые, важные моменты, которые могут помочь на начальном этапе.

    Так же, при разработке представлений, советую обратить внимание, к примеру, на то, что тазывается Tags в JSP, это позволит заметно утилизировать (фу слово) код представлений.
    Ответ написан
  • Artifact group:war exploded: Error during artifact deployment. See server log for details?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    <param-value>web/servler1.xml
    А вот этот файл то есть? Что там у вас?
    Вот более полный кусок конфига web.xml
    <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>web/servler1.xml
                </param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
    Ответ написан
  • Почему после logout wabapp пускает на защищенную часть?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Давайте так. https://github.com/elennaro/sshwa/tree/0.2-SNAPSHOT - приложение отсюда работает?
    Если работает, то что-то у вас не так. Если нет - то нужно разбираться с конфигурированием, что-то где-то не сработало.

    Сам использую xml-конфигурацию - с закрытием областей проблем не было ни разу.
    Но хочу отметить, у меня были проблемы с выходом, не мог разобраться, почему не работал.

    В результате, у меня в web.xml появились вот такие фильтры:
    <filter>
            <filter-name>springSecurityFilterChain</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        </filter>
    
        <filter-mapping>
            <filter-name>springSecurityFilterChain</filter-name>
            <url-pattern>/j_spring_security_logout</url-pattern>
        </filter-mapping>
    
        <filter-mapping>
            <filter-name>springSecurityFilterChain</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>


    Ну и сам конфиг безопасности:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns="http://www.springframework.org/schema/security"
                 xsi:schemaLocation="http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    	http://www.springframework.org/schema/security 
    	http://www.springframework.org/schema/security/spring-security-4.0.xsd">
    
        <beans:bean id="tokenPersistRepo"
                    class="org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl">
            <beans:property name="dataSource" ref="dataSource"/>
        </beans:bean>
    
    
        <beans:bean id="nonAjaxRequestMatcher" class="org.whatever.NonAjaxRequestMatcher"/>
    
        <beans:bean id="loginUrlAuthenticationEntryPoint"
                    class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
            <beans:constructor-arg value="/login"/>
        </beans:bean>
    
        <beans:bean id="ajaxAuthenticationEntryPoint"
                    class="org.springframework.security.web.authentication.HttpStatusEntryPoint">
            <beans:constructor-arg name="httpStatus"
                                   value="#{T(org.springframework.http.HttpStatus).UNAUTHORIZED}"/>
        </beans:bean>
    
        <beans:bean id="authenticationRequestCache"
                    class="org.springframework.security.web.savedrequest.HttpSessionRequestCache">
            <beans:property name="requestMatcher" ref="nonAjaxRequestMatcher"/>
        </beans:bean>
    
        <beans:bean id="authenticationEntryPoint"
                    class="org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint">
            <beans:constructor-arg>
                <beans:map>
                    <beans:entry key-ref="nonAjaxRequestMatcher" value-ref="loginUrlAuthenticationEntryPoint"/>
                </beans:map>
            </beans:constructor-arg>
            <beans:property name="defaultEntryPoint" ref="ajaxAuthenticationEntryPoint"/>
        </beans:bean>
    
        <http entry-point-ref="authenticationEntryPoint" use-expressions="true">
            <request-cache ref="authenticationRequestCache"/>
    
            <headers>
                <frame-options disabled="true"/>
            </headers>
    
            <intercept-url pattern="/backend/roles/**" access="hasAnyRole('ROLE_ADMINISTRATOR')"/>
            <intercept-url pattern="/backend/**" access="hasAnyRole('ROLE_ADMINISTRATOR', 'ROLE_SYS')"/>
            <intercept-url pattern="/registries/**" access="hasAnyRole('ROLE_ADMINISTRATOR', 'ROLE_SYS', 'ROLE_REGISTRY')"/>
            <intercept-url pattern="/registries" access="hasAnyRole('ROLE_ADMINISTRATOR', 'ROLE_SYS', 'ROLE_REGISTRY')"/>
            <intercept-url pattern="/login/**" access="permitAll"/>
            <intercept-url pattern="/logout/**" access="permitAll"/>
            <intercept-url pattern="/resources/**" access="permitAll"/>
            <intercept-url pattern="/bundles/**" access="permitAll"/>
            <intercept-url pattern="/jawr/**" access="permitAll"/>
            <intercept-url pattern="/error/**" access="permitAll"/>
    
            <access-denied-handler error-page="/403"/>
    
            <intercept-url pattern="/**" access="isAuthenticated()"/>
    
            <form-login login-page="/login" default-target-url="/"
                        authentication-failure-url="/login?error" username-parameter="username"
                        password-parameter="password"/>
    
            <logout logout-success-url="/" logout-url="/j_spring_security_logout" delete-cookies="JSESSIONID,remember-me"/>
    
            <remember-me
                    key="${app.remember-me-key}"
                    remember-me-parameter="remember-me"
                    remember-me-cookie="remember-me"
                    token-validity-seconds="86400"
                    token-repository-ref="tokenPersistRepo"/>
    
            <csrf/>
        </http>
    
        <authentication-manager alias="authenticationManager">
            <authentication-provider user-service-ref="usersManager">
                <password-encoder hash="bcrypt"/>
            </authentication-provider>
        </authentication-manager>
    
    </beans:beans>


    Есть подозрение, что он избыточен, но сейчас проверять нет цели, желания и времени, т.к. проекты с Java не пересекаются, к сожалению.
    Ответ написан
    4 комментария
  • Как генерировать ссылку на профиль пользователя через MVC?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Ну, к примеру так:

    @RequestMapping(value = {"/url/to/profileAction/{id}"}, method = RequestMethod.GET)
    public ModelAndView profileAction(@PathVariable("id") Long id) {
    	ModelAndView modelAndView = new ModelAndView();
    	modelAndView.setViewName("profile");
    	
    	UserDTO data = getUserDTOsService().getById(id);
    
    	if (data != null) {
    		modelAndView.getModel().put("data", data);
    		return modelAndView;
    	}
    	
    	return "redirect:/";/*ну или бросить исключение, что нет пользователя*/
    }
    Ответ написан
    1 комментарий
  • Как запускать CRON ссылку сайта на Windows Server?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Дергайте нужные ресурсы curl-ом, вот и все.
    Ответ написан
    Комментировать
  • Почему отсутствие joda, org.joda.time.DateTime?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Это бибилиотека, www.joda.org/joda-time/.
    Отсутствует она, к примеру, потому что не подключена, так как не является стандартной библиотекой, входящей в комплект JDK.

    Чтобы с ней работать, ее нужно подключить в вашей IDE тем или иным способом - тут все зависит от типа проекта и IDE.

    Проще всего его добавить Maven-проект, просто добавив pom.xml нужный артифакт:
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.7</version>
    </dependency>
    Ответ написан
    Комментировать
  • Как получить залогиненого пользователя в Spring Security?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    К примеру, как то так (кусок кода из контроллера):
    // check if user is login
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    if ((!(auth instanceof AnonymousAuthenticationToken)) && auth != null) {
    	UserDetails userDetail = (UserDetails) auth.getPrincipal();
    
    	if (userDetail != null) {
    		model.addObject("username", userDetail.getUsername());
    	} else {
    		model.addObject("username", "");
    	}
    }
    ,

    В конфиге безопасности есть такое:
    <authentication-manager alias="authenticationManager">
            <authentication-provider user-service-ref="usersManager">
                <password-encoder hash="bcrypt"/>
            </authentication-provider>
        </authentication-manager>


    В конфиге контекста приложения объявлен usersManager:
    <bean id="usersManager" class="org.whatever.impl.UsersServiceImpl">
            <property name="usersDAO" ref="usersDAO"/>
            <property name="languageDao" ref="languagesDAO"/>
            <property name="roleDAO" ref="roleDAO"/>
            <property name="usersViewDAO" ref="usersViewDAO"/>
    </bean>

    Ну и сам UsersServiceImpl имеет такой вид:
    package org.whatever.impl;
    /*импорты убрал */
    /* интерфейс UsersService наследует org.springframework.security.core.userdetails.UserDetailsService */
    public class UsersServiceImpl extends ServiceBase implements UsersService {
    
        @Autowired
        private UsersDAO usersDAO;
    
        public void setUsersViewDAO(UsersViewDAO usersViewDAO) {
            this.usersViewDAO = usersViewDAO;
        }
    
        public UsersDAO getUsersDAO() {
            return usersDAO;
        }
    
    	/*сократил код*/
    
        /**
         * Детали по пользователю, полученному из базы
         */
        @Override
        @Transactional(readOnly = true)
        public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException {
            User userFromDb = this.getUsersDAO().getUserByLogin(login);
    
            if (userFromDb != null) {
                return new org.whatever.UserView(userFromDb); /*применяет org.springframework.security.core.userdetails.UserDetails*/
            }
    
            String result = new Formatter().format("User with login %s not found", login).toString();
            throw new UsernameNotFoundException(result);
        }
    }
    Ответ написан
    Комментировать