Проектирование сложной структуры на странице jsp и передача значений на ней с помощью класса действий - PullRequest
0 голосов
/ 09 декабря 2011

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

Сначала я объясню сценарий, который я пытаюсь выполнить.Пожалуйста, будьте терпеливы, это будет долго (хотя я пытался сделать это коротким).И поскольку я не очень опытен, пожалуйста, будьте добры.

Мне нужно контролировать доступ пользователей к различным страницам и функциям веб-приложения, которое я создаю.Веб-страницы сгруппированы в различные модули.И каждый модуль имеет разные типы параметров доступа.Например, модуль 1 может иметь только параметры доступа для чтения и записи, а модуль 2 может иметь параметры доступа для чтения, записи, изменения и удаления.Моя база данных создана так, как мне нужно, мне просто нужна помощь в создании внешнего интерфейса для управления ею.

У меня есть что-то вроде следующего (все переменные и списки задаются в действиикласс, который был вызван перед отображением этой страницы):

<s:form id="form1" name="form1" action="savePermissions">
    <s:select name="module" label="Select Module" list="moduleList" onchange="dojo.event.topic.publish('getPermissions');"/>
    <table>
        <s:iterator id="iter" value="emplList" var="emplVar">
        <tr>
            <td><s:textfield name="empl" value="%{<s:property value='emplName'/>}" readonly="true"/></td>
            <td><s:select name="perm" value="%{<s:property value='permission'}" list="perList"/></td>
        </tr>
    </s:iterator>
    </table>
    <s:submit value="save"/>
</s:form>

Здесь, когда модуль выбирается из первого раскрывающегося списка, отображается список пользователей и соответствующие параметры доступа.Теперь я должен иметь возможность выбрать опцию доступа для каждого пользователя и затем связаться с классом действия с этими значениями, чтобы я мог обновить базу данных.

Но здесь у меня есть 2 проблемы:

1.) Текстовые поля сотрудника не заполняются значениями.

2.) В классе действий, который будет вызываться при отправке этой формы, как я могу убедиться, что получаю правильные значения, соответствующие правильнымимя пользователя.Я имею в виду, что если «read» выбрано для «user1» и «view» для «user2» на странице jsp, я должен получить то же самое в классе действий.

Пожалуйста, сообщите.

Спасибо !!

Если что-то неясно, пожалуйста, прокомментируйте.

РЕДАКТИРОВАТЬ

public class getPermissions1Action extends ActionSupport {
private List<String> moduleList;
public List<String> getModuleList() {
    return moduleList;
}
public void setModuleList() {
    this.moduleList = Arrays.asList("module1","module2","module3");
}


private empl emplVar;
private List<empl> emplList;
public List<empl> getEmplList() {
    return emplList;
}
public void setEmplList(List<empl> emplList) {
    this.emplList = emplList;
}
public empl getEmplVar() {
    return emplVar;
}
public void setEmplVar(empl emplVar) {
    this.emplVar = emplVar;
}

private List<String> perList;
public List<String> getPerList() {
    return perList;
}
public void setPerList() {
    this.perList = Arrays.asList("enter","view","edit","delete","nothing");
}

public getPermissions1Action() {

}

@Override
public String execute(){
empl var = new empl();
List<empl> empl = new ArrayList<empl>();
try{
    for(int i=0;i<3;i++){
        var.setEmplName("name");
        var.setSelPer("view");
        empl.add(var);
    }
    }catch(Exception e){
        System.out.println(e.getMessage());
    }
    setEmplList(empl);
    setModuleList();
    setPerList();
    return SUCCESS;
}
}

empl class:

public class empl {

    private String emplName;
    private String selPer;
    public String getEmplName() {
        return emplName;
    }
    public void setEmplName(String emplName) {
        this.emplName = emplName;
    }
    public String getSelPer() {
        return selPer;
    }
    public void setSelPer(String selPer) {
        this.selPer = selPer;
    }

}

1 Ответ

1 голос
/ 09 декабря 2011
The employee text fields do not get populated with the values.

вам нужно сказать / показать, из чего состоит iter в вашем классе действий? или вы ожидаете, что в тот момент, когда вы выберете какое-то значение в своем первом select компоненте, оно должно заполнить значение итератора, а в полях должны появиться соответствующие значения итератора?

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

Относительно второй части. Что, если вам нужно предоставить более одного разрешения пользователю, в этом случае вы можете включить опцию множественного выбора, но я бы предпочел список флажков перед каждым пользователем, и я могу выбрать согласно моим вариантам / выбору.

Лично для обеспечения доступа к приложению на основе ролей я выберу другой путь, например, Spring Security, который был разработан с учетом всех таких случаев использования.

Вот рабочая копия для вас.

<s:form id="form1" name="form1" action="savePermissions">

    <table>
        <s:iterator value="emplList" var="emplVar">
        <tr>
            <td><s:textfield name="empl" value="%{emplName}" readonly="true"/>
            </td>

        </tr>
    </s:iterator>
    </table>
    <s:submit value="save"/>
</s:form>

когда итератор будет перебирать emplList, он помещает объект в вашем случае empl поверх стека значений, и мы можем напрямую обращаться к его свойствам

К вашему сведению: имя класса всегда должно начинаться с заглавной буквы в соответствии с соглашением об именах

А в классе Action есть много проблем

@Override
public String execute(){
empl var = new empl();
List<empl> empl = new ArrayList<empl>();  
// Ther is no need to define this instead you can add directly to emplList
   like emplList.add(object);
try{
    for(int i=0;i<3;i++){
        var.setEmplName("name");
        var.setSelPer("view");
        empl.add(var);
    }
    }catch(Exception e){
        System.out.println(e.getMessage());
    }
    setEmplList(empl);
    setModuleList();
    setPerList();
    return SUCCESS;
}

Имя действия getPermissions1Action всегда должно начинаться с заглавной буквы (GetPermissions1Action), хотя get / set следует использовать для методов, а не для имени класса

и я не уверен, почему вы определяете конструктор действий

public getPermissions1Action() {

}
...